Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Czy dobrze zabezpieczyłem skrypt przed SQL Injection?
Forum PHP.pl > Forum > Przedszkole
Rookie
Witam,
Wiem wiem, dubluję temat, ale w poprzednim takim samym było trochę błędów, których nie wiem dlaczego nie mogłem edytować, bo po naciśnięciu edytuj pokazał się tylko fragment mojej wiadomości i do tego nie ten który chciałem edytować, więc proszę o usunięcie poprzedniego.
Napisałem obsługę edycji filmów w bazie danych i starałem się go zabezpieczyć przed sql injection, jednak nie wiem czy mi się udało.
Na tą stronę można się dostać tylko poprzez zalogowanie, więc mój atak sprawdzający skuteczność polegał na zaznaczeniu zamiast danych edytowanego filmu to danych użytkownika.
Skrypt wygląda następująco:
Plik add.php:
  1. if (isset($_GET[edytuj])) {
  2. header("Location: edit.php?edytuj=$_GET[edytuj]");
  3. exit();
  4. }

  1. <td valign="top" class="trescc">
  2. <a href="add.php?edytuj='.$dane[id_filmu].'"><img src="graf/edytuj.png" alt="Usuń" style="border: 0px;" title="Edytuj"></a>
  3. </td>

Plik edit.php:
  1. <?php
  2. require('conn.php');
  3. $edytuj=mysql_real_escape_string(trim($_GET[edytuj]));
  4. $mysql=mysql_query("SELECT * FROM filmy WHERE id_filmu='$edytuj'") or die (mysql_error());
  5. $ile=mysql_num_rows($mysql);
  6. if($ile != 1){
  7. header("Location: add.php");
  8. exit();
  9. }
  10. require_once('funkcje.php');
  11. naglowek('Edytuj');
  12. while($edit = mysql_fetch_assoc($mysql)) {
  13. $wys_tytul=($edit[tytul]);
  14. $wys_ilosc=($edit[ilosc]);
  15. $wys_pochodzenie=($edit[pochodzenie]);
  16. $wys_typ=($edit[typ]);
  17. $wys_rodzaj=($edit[rodzaj]);
  18. }
  19. ?>

Próbowałem wpisać adres tak:
Cytat
http://localhost/FILMY/add.php?edytuj=0 UNION SELECT `login`,`imie`,`nazwisko`,`email`,`password` FROM `user` WHERE `id` = 1 /*

Lecz na szczęście z niepowodzeniem ;p
Dodam, że id jest dobre, id=1 to akurat admin.
Jeżeli, ktoś się na tym zna lepiej, niech napisze odpowiednio spreparowanego linka, ażeby wyświetlić dane użytkownika admin w polu z filmem.
A no i jeszcze wyświetlane dane w pliku edit.php
  1. <tr class="hov">
  2. <td valign="top" class="trescc" align="right">1&nbsp;</td>
  3. <td valign="top" class="trescc">
  4. <?php echo $wys_tytul; ?>
  5. </td>
  6. <td valign="top" class="trescc">
  7. <?php echo $wys_ilosc; ?>
  8. </td>
  9. <td valign="top" class="trescc">
  10. <?php echo $wys_pochodzenie; ?>
  11. </td>
  12. <td valign="top" class="trescc">
  13. <?php echo $wys_typ; ?>
  14. </td>
  15. <td valign="top" class="trescc">
  16. <?php echo $wys_rodzaj; ?>
  17. </td>
  18. </tr>

Poproszę jakiegoś eksperta o potwierdzenie bezpieczeństwa skryptu bądź podanie linka do wyświetlenia danych użytkownika w miejscu wyświetlania filmu.
Z góry dziękuję.
bełdzio
mysql_real_escape_string służy do escapowania stringów, a nie liczb, jak masz liczbę to po prosu spr czy jest to liczba / rzutuj na inta
Rookie
Ale mysql_real_escape_string daje to: \ przed apostrofami, więc mogę zrobić z tego inta ale mysql_real_escape_string lepiej żeby był ;p
skowron-line
Cytat(Rookie @ 23.08.2009, 15:48:01 ) *
Ale mysql_real_escape_string daje to: \ przed apostrofami, więc mogę zrobić z tego inta ale mysql_real_escape_string lepiej żeby był ;p

To pierdyknij sobie przed wszystkik escapowanie i nie bedziesz miał problemu.
+
Na forum jest temat o SQL Injection dobrze by było jak byś przeczytał.


P.S Olsztyn górą smile.gif
Rookie
Czytałem ten temat, ale chciałem po prostu się upewnić czy mój skrypt jest na to podatny smile.gif
Jak do tej pory nikt nie podał mi odpowiedniego linku to myślę, że spokojnie mogę wywnioskować, iż się dobrze zabezpieczyłem ;p
PS. A jak biggrin.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.