Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] SQL injection
Forum PHP.pl > Forum > Przedszkole
mihipoznan
Jak powinno wyglądać zapytanie do bazy, które jest "odporne" na atak SQL injection jeżeli jest COUNT ? Przykładowo:
  1. <?php
  2. $zapytanie = "SELECT COUNT(*) FROM test";
  3. ?>

Resztę wiem, tylko z tym countem się zastanawiam..
Berg
Przykład jaki podałeś jest imo całkowicie bezpieczny. To podstawianie nieprzefiltrowanych danych zewnętrznych sprawia, że istnieje możliwość SQL Injection (lub też brak apostrofów przy danych tekstowych). Samo COUNT jest samo w sobie nieszkodliwe.
mihipoznan
Okej, dzięki smile.gif A w przypadku limitu muszę każdą zmienną zabezpieczać ? (jak najlepiej addslashes() ) ?
Danone
Tutaj masz wszystko ładnie opisane jak się bronić przed tego typu atakami smile.gif

http://forum.php.pl/index.php?showtopic=23...=sql++injection
PawelC
Poczytaj sobie przyklejony temat o sql injection, tam jest naprawdę dużo wszystkiego, wiele przykładów i jeszcze więcej rozwiązań.

EDIT: Danone wyprzedziłeś mnie winksmiley.jpg Post do kosza
mihipoznan
Przeczytałem cały temat w w/w linku i okej już wiem..ale jak mam limit to zabezpieczać tylko zmienne ? Przykładowo..:

  1. <?php
  2. $page = $_GET['page'];
  3. $ilestr = $_GET['ilestr'];
  4.  
  5.  
  6. if(SecureQuery($page, 'string'))
  7. (SecureQuery($ilestr, 'string'))
  8.  
  9. $sql= 'SELECT * FROM 'test' LIMIT ".(("'.$page-1'")*"'$ilestr'").",".'"$ilestr'"*"'$page.'"";
  10. $result = mysql_query($sql);
  11. ?>


W tel linijce mi się chyba pomieszało trochę..orygnalana to :
  1. <?php
  2. $sql= "SELECT * FROM test LIMIT ".(($page-1)*$ilestr).",".$ilestr*$page."";
  3. ?>
Crozin
  1. <?
  2.  
  3. $page = (int) $_GET['page'];
  4. $ilestr = (int) $_GET['ilestr'];
  5.  
  6. $query = sprintf('SELECT * FROM test LIMIT %s, %s;', $page * $ilestr, $ilestr);
  7. $result = mysql_query($query);
  8.  
  9. ?>
mihipoznan
A dlaczego tak ? smile.gif
Crozin
A dlaczego tak nie? Jest bezpieczne - można co najwyżej sprawdzić czy $ilestr (jak rozumiem ta zmienna określa ile wyników ma być na stronie) jest większa od zera ($page może być równa zeru - ją można by sprawdzić czy nie jest mniejsza od zera)
  1. <?php
  2. if($page < 0 || $ilestr <= 0)
  3. exit('Blad');
  4. ?>
mihipoznan
Jest okej, dzięki smile.gif Masz rację biggrin.gif
bełdzio
ble ble ble ;-) po to powstalo ctype_* żeby z niego korzystać, tak samo jak filtry
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.