Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zabezpieczenie skryptu
Forum PHP.pl > Forum > PHP
Derin
Witam, mam skrypt na logowanie, działa w miarę dobrze ale nie jestem pewny czy nie jest podatny na ataki typu sql injection itd.
Mógłby ktoś się wypowiedzieć na ten temat?
  1. <?php
  2. $title = login;
  3. include('../global/global_header.php');
  4. echo'<h1>Logowanie</h1>';
  5. if(!$_SESSION['x54c']){
  6. echo'<form href="#" name="loginform" method="POST">';
  7. echo'<input name="login" type="text" placeholder="Login" maxlength="40" size="20" class="loginpad" required>';
  8. echo'<input name="password" type="password" placeholder="Hasło" maxlength="40" size="20" class="passpad" required>';
  9. echo'<button class="loginbutton" onClick="document.loginform.submit();">Zaloguj</button>';
  10. echo'</form>';
  11. }else{
  12. echo'<script>';
  13. echo'location.href="**";';
  14. echo'</script>';
  15. }
  16. $link = mysqli_connect('**', '**', '**', '**');
  17. if (isset($_POST['login']) && isset($_POST['password']) && $_SESSION['x54c'] == FALSE) {
  18. $passencrypted = $_POST['password'];
  19. if($passencrypted != "")$pass = hash('sha512', $passencrypted);
  20. $login = $_POST['login'];
  21. $sql1 = mysqli_num_rows(mysqli_query($link, "SELECT * FROM `users` WHERE `login` = '$login' AND `password` = '$pass' AND `ranga` = '100'"));
  22. $checksisid = mysqli_query($link, "SELECT privagles FROM `users` WHERE `login` = '$login' AND `password` = '$pass'");
  23. $checkemail = mysqli_query($link, "SELECT email FROM `users` WHERE `login` = '$login' AND `password` = '$pass'");
  24. while($checkbs = mysqli_fetch_array($checksisid))
  25. while($checmail = mysqli_fetch_array($checkemail))
  26. {
  27. $_SESSION['chuj'] = $checkbs[privagles];
  28. $_SESSION['mail'] = $checmail[email];
  29. }
  30. if ($sql1 == 1) {
  31. $admin = true;
  32. $check = 1;
  33. }
  34. else
  35. {
  36. $admin = false;
  37. echo'<script>';
  38. echo'alert("Złe hasło lub login.");';
  39. echo'</script>';
  40. }
  41.  
  42. if ($admin)
  43. {
  44. $_SESSION['user'] = $login;
  45. $_SESSION['x54c'] = TRUE;
  46. if($check == 1){
  47. echo'<script>';
  48. echo'location.href="**";';
  49. echo'</script>';
  50. $check = 0;
  51. }
  52. }
  53. }
  54. if ($_SESSION['x54c']){
  55. if ($_GET[logout])
  56. {
  57. $_SESSION['x54c'] = FALSE;
  58. $_SESSION['chuj'] = FALSE;
  59. $_SESSION['mail'] = FALSE;
  60. echo'<script>';
  61. echo'location.href="**";';
  62. echo'</script>';
  63. }
  64. }
  65. include('../global/global_footer.php');
  66. ?>
b4rt3kk
Pole loginu jest podatne na sql injection, nie chronisz się nigdzie przed wprowadzeniem chociażby takiego loginu: Bartek'; DROP TABLE users; --
Derin
Jak to zabezpieczyć?
rad11
Bindowanie parametrów(najbezpieczniej), mysql_real_escape_string.
Derin
Mógłbyś podać przykład bo tak trochę zielony w tym jestem? ;x
Derin
Dziękuję.
$login = mysqli_real_escape_string($link, $_POST['login']);
To załatwi sprawę?
rad11
Uzyj tego i tego.
Derin
Tego bind_param nadal nie rozumiem.
Jak to można zastosować?
rad11
Wejsc w drugi link, poszukac bindowania dla zapytania SELECT i wdrozyc to u siebie.
Dominator
Polecam przebudować skrypt na PDO.
com
@up poco? skoro jest mysqli to jest ok smile.gif byle było bindowanie itd smile.gif
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.