Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Proszę o ocenę skrypu logowania
Forum PHP.pl > Inne > Oceny
raak07
Proszę o ocenę skryptu logowania
  1. ob_start();
  2. if (!empty($_POST)) {
  3. if ($_POST['przycisk'] == 'Anuluj') {
  4. header("Location: http://".$_SERVER['HTTP_HOST']."/".rtrim(dirname($_SERVER['PHP_SELF']),'/\\')."./index.php"); }
  5. if ($_POST['przycisk'] == 'Loguj') {
  6. $ws=0;
  7. $_POST['licz']++;
  8. include_once('./baza.php');
  9. if ($_POST['texlog'] == "a" && $_POST['haslog'] == "a") {
  10. $ws=1;
  11. $dane = "0,ABCDEFGHIJ,A";}
  12. if ($ws==0) {
  13. $log=trim(htmlspecialchars(stripslashes($_POST['texlog'])));
  14. $has=md5(trim(htmlspecialchars(stripslashes($_POST['haslog']))));
  15. $zapytanie="SELECT * FROM logow ";
  16. $odp=chpol($zapytanie);
  17. if ($ile = mysql_num_rows($odp) != 0) {
  18. $zapytanie = mysql_query("SELECT * FROM logow WHERE login='$log' && haslo='$has' && ws='A' ");
  19. $wiersz = mysql_fetch_array($zapytanie);
  20. !empty($wiersz) ? $ws=1 : '';
  21. $dane = $wiersz[0].",".$wiersz[3].",".$wiersz[5]; } }
  22. if ($ws==1) {
  23. session_start();
  24. if (!isset($_SESSION['inicjuj'])) {
  25. session_regenerate_id();
  26. $_SESSION['inicjuj'] = true;
  27. $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
  28. if($_SESSION['ip'] != $_SERVER['REMOTE_ADDR'])
  29. { session_destroy();
  30. header("Location: <a href="http://www.google.pl&quot%3b%29;" target="_blank">http://www.google.pl");</a> }
  31. else { unset($_SERVER['ip']); }
  32. }
  33. $_SESSION['uz'] = $dane;
  34. header("Location: http://".$_SERVER['HTTP_HOST']."/".rtrim(dirname($_SERVER['PHP_SELF']),'/\\')."./menu.php");
  35. }
  36. if ($ws==0 && $_POST['licz'] == 3) {header("Location: <a href="http://google.pl&quot%3b%29;" target="_blank">http://google.pl");</a> }
  37. }
  38. }
  39.  
  40. ?>
  41. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  42. <html xmlns="http://www.w3.org/1999/xhtml">
  43. <head>
  44. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
  45. <title>Untitled Document</title>
  46. <style type="text/css">
  47. <!--
  48.  
  49. body {
  50. background: #D6DBCA;
  51. margin:0;
  52. font: 14px Arial, Helvetica, sans-serif;
  53. }
  54.  
  55. #blok {
  56. margin: 0 auto;
  57. position:relative;
  58. width:700px;
  59. height:580px;
  60. top:0px;
  61. background: #F5F5F5;
  62. }
  63. #tytul{
  64. font-size: 24px;
  65. font-weight: bolder;
  66. white-space: pre;
  67. padding: 15px 0px 25px;
  68. text-align:center;
  69. color: #003366;
  70. }
  71. -->
  72. </style>
  73. <script type="text/javascript">
  74. function fokus(texlog)
  75. { var el = document.getElementById(texlog);
  76. el.focus();
  77. }
  78. </script>
  79. </head>
  80.  
  81. <body onload="fokus('texlog');">
  82. <div id="blok" >
  83. <div id="tytul"></div>
  84. <form action="log.php" method="post" enctype="application/x-www-form-urlencoded" name="form" id="form">
  85. <div style="text-align:left; padding-left:50px; padding-bottom:3px">Użytkownik: <input name="texlog" type="text" id="texlog" maxlength="20"/></div>
  86. <div style="text-align:left; padding-left:83px; padding-bottom:8px">Hasło: <input name="haslog" type="password" maxlength="20"/></div>
  87. <input name="licz" type="hidden" value="<?php print $_POST['licz'] ?>" />
  88. <div style="position:absolute; width:128px; height:45px; left: 287px; top: 88px; color:#CC3300"><?php if ($_POST['licz'] != 0) print "Niewłaściwy login lub hasło"; ?></div>
  89. <div style="text-align:left; padding-left:125px; white-space:pre"><input name="przycisk" type="submit" value="Loguj" /> <input style="color:#FF0000" name="przycisk" type="submit" value="Anuluj" /></div>
  90. </form>
  91.  
  92. </div>
  93. </body>
  94. </html>
  95. <?php
Na stronie do której dostęp mają tylko zalogowani użytkownicy.
  1. if ($_SESSION['inicjuj'] == 0 || $_SESSION['ip'] <> $_SERVER['REMOTE_ADDR'])
  2. { unset($_SESSION['ip']);
  3. header("Location: <a href="http://google.pl&quot%3b%29;" target="_blank">http://google.pl");</a> }

Pozdrawiam
deirathe
STraszny makaron :/, no i kod mało przenoszalny. Generalnie nic specjalnego
darko
Moim zdaniem kod mało czytelny, logiki nie analizowałem nie wiem czy skrypt działa, ale czy bezpieczny to też mam wątpliwości, np. co z próbą ataku jeśli dla user wpiszemy:

\' or 1=1 --

a hasło damy

--

Według Twojego zapytania: SELECT * FROM logow WHERE login='$log' && haslo='$has' && ws='A' "

dla podanego zestawienia powinno (ale nie musi) zmienić się na:

SELECT * FROM logow WHERE login='' or 1=1 -- && haslo='$has' && ws='A' "

co oznacza mniej więcej: pobierz wszystkie pola z tabeli logow dla loginu='' lub true (czyli jeśli login będzie pustym stringiem lub jeśli 1 jest równe 1, czyli prawda, czyli zawsze pobierze)

reszta Twoich warunków nie jest już wykonywana ponieważ dodaję na końcu komentarz sql ( -- )

sprawdź co się stanie

ps. osobiście dla świętego spokoju z sql injection użyłbym PDO, przygotowywania składni zapytań i bindowania parametrów, ale to już kwestia gustu.

ps2. proces logowania opakowałbym w jakąś klaskę a'la LoginManager
Kildyt
Jak już koledzy u góry napisali - nic specjalnego.
Trenuj, trenuj i czytaj. winksmiley.jpg
- bez tabulacji daleko nie zajedziesz, jeżeli kod będzie dłuższy to trudno będzie cokolwiek zauważyć,
- zacznij stosować angielskie nazewnictwo,
- nie mieszaj warstwy HTML z PHP,
- echo nie lepsze od print?,
- mysql_real_escape_string to bardzo fajna funkcja filtrująca dane.

Życzę powodzenia w dalszej pracy.
raak07
Cześć
Dziękuję za poświęcony czas i cenne dla mnie (po)odpowiedzi.
Prośba. Proszę o podanie więcej przykładów ataków na bazę danych i js na PW.

P.S.
- nie mieszaj warstwy HTML z PHP - czy możesz to bardziej rozwinąć

Pozdrawiam
marcio
Cytat
- nie mieszaj warstwy HTML z PHP - czy możesz to bardziej rozwinąć


Koledze zapewne chodzilo o MVC.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.