Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Walidacja danych.
Forum PHP.pl > Forum > PHP
arrtxp
Witam,
otóż, że jestem początkujący i piszę strukturalnie.
Mam pytanie:

  1. function spr_text($text){
  2. if(!empty($text)){
  3. $search = array('@<script[^>]*?>.*?</script>@si', '@<[\/\!]*?[^<>]*?>@si', '@<style[^>]*?>.*?</style>@siU', '@<![\s\S]*?--[ \t\n\r]*>@' );
  4. $text = preg_replace($search, '', $text);
  5. }
  6. return $text = mysql_real_escape_string(nl2br(trim($text)));
  7. }


Czy taka funkcja zabezpieczy przez Atak SQL Injection itp ?
com
Ja tu raczej widzę przeszukiwanie pod kontem XSS niż SQL Injection, bo z SQL to chyba jedyny zwiazek ma mysql_real_escape_string()... ponadto poco nl2br ? i tworzenie z \n <br> które wczesniej usówasz funkcja trim, a potem jescze raz używasz trim(), przerost formy nad treścia polecam rzutowanie zmiennych, czy też PDO, zamiast takiej zabawy wink.gif
arrtxp
Ta... to teraz zastanów się jak atak SQL Injection wygląda...
com
Ja mam się zastnawiać?! no ja chyba wiem, powiedz mi jaki to ma zwiazem z <script>...</script>, mylisz pojęcia...
arrtxp
Hym, jeżeli wykonam update i wrzuce sobie tam własny skrypcik, to chyba nie chalo. Ta funkcja przed tym zabezpiecza... tak samo gdy chcę metodą post lub get zabawić się w wyciągnięcie danych. Czy niemam racji ?
com
ale gdzie wrzucisz ten skrypcik, tak jak powiedziałem XSS, a SQL Injection to dwie zupełnie inne kwestie, XSS polega min na wyciaganiu od usera sida sesji potrzebnego do dalszych manipulacji, a SQL Injection to nic innego jak manipulacja zawartoscia bazy danych, niekoniecznie majac do niej jawny dostęp... Tak jak powiedziałęm zapoznasz się z PDO i tam jest mase mechanizmów "ochronnych" których w pochodnych mysqlX nie ma i nie było, dzieki temu nie trzeba sie bawić w pisanie czegos takiego, bo to sie okazuje być zbedne wink.gif a pozatym usuwanie encji z podciagu obsługuje jedna funkcja htmlentities()...
arrtxp
SQL Injection przeprowadza się poprzez ?
!*!
Cytat(arrtxp @ 20.05.2013, 23:16:03 ) *
Czy taka funkcja zabezpieczy przez Atak SQL Injection itp ?

Nie. Jak już wspomniał @com pomyliłeś bajki, a mysql_real_escape_string też specjalnie zabezpieczeniem nie jest, chyba że później jeszcze coś robisz.

Cytat(arrtxp @ 20.05.2013, 23:53:32 ) *
SQL Injection przeprowadza się poprzez ?

http://pl.wikipedia.org/wiki/SQL_injection
arrtxp
No tak... i np: w polu input lub w w formularzu www pisze się odpowienią składnie.
I ta funkcja temu zapobiega... możecie przetestować.
!*!
Jaką składnie i czemu zapobiega, sql injection? Nie sądzę.
com
Jescze raz powiem to sie zwie atakiem XSS http://hack.pl/artykuly/dla-poczatkujacych/podstawy-xss.html i wystarczy do tego zastosować htmlentities() i wszytkie < > itd zamieni Ci na &lt i &gt zresztom co ja bede Ci mówił poczytaj manuala http://php.net/manual/en/function.htmlentities.php wink.gif
arrtxp
Skrypt usuwa znaki typu: " ' ", za pomocą, których dokonuję się SQL Injection.


!*!
Cytat(arrtxp @ 21.05.2013, 00:11:50 ) *
Skrypt usuwa znaki typu: " ' ", za pomocą, których dokonuję się SQL Injection.

Skąd pomysł że to wystarczy? http://johnroach.info/2011/02/17/why-mysql...ection-attacks/
Poza tym preg_match odwoła się tylko do pierwszego ciągu wystąpienia.

Nie ma co rozwijać tego dalej, bo dużo już o tym było a temat chyba nawet jest przyklejony. Najlepiej zrobisz jak zaczniesz korzystać z PDO i bindowania.
Mackos
Jeśli chcesz zabezpieczyć swoje zapytania do bazy danych skorzystaj z jakiejś gotowej biblioteki jak np. PDO.
Tutaj masz fajny tutorial http://pl.wikibooks.org/wiki/PHP/Biblioteka_PDO
Jeśli będziesz bindował wszystkie wartości wprowadzane do bazy, to będziesz miał całkiem bezpieczniej konstruowane zapytania.
arrtxp
No dobra... ale " ; " też nie przepuszcza ...

http://johnroach.info/2011/02/17/why-mysql...ection-attacks/

^^ żaden przykład nie przeszedł próby.
com
Cytat
Skrypt usuwa znaki typu: " ' ", za pomocą, których dokonuję się SQL Injection.


htmlentities() też specool.gif :
http://ideone.com/RMZk0Y
arrtxp
" ; " nie przepuszcza ...
!*!
Nie wiem jak Ty to sprawdzasz, ale ja tam w funkcji wyżej widzę, że jednak przepuszcza "wszystko" jak leci.
com
Tak jak napisał !*! dalsza dywagacja na ten temat nie ma sensu, jak sugerowałem na początku, a potem poparli to inni ogarnij PDO i zapomnij o pisaniu takich funkcji które wniosły tyle że jak twierdzisz usunąłeś przecinek z podciągu, gra nie warta świeczki... wink.gif
arrtxp
Y? podaj mi co wklepujesz.
com
Podsumowując to jest wręcz zabawne, zmobilizowałem się żeby jednak wrzucić w kompilator te twoje wypociny i po pierwszym teście stwierdzam, że to miało większa wartość przed tym zanim przetestowałem...

  1. function spr_text($text){
  2. if(!empty($text)){
  3. $search = array('@<script[^>]*?>.*?</script>@si', '@<[\/\!]*?[^<>]*?>@si', '@<style[^>]*?>.*?</style>@siU', '@<![\s\S]*?--[ \t\n\r]*>@' );
  4. $text = preg_replace($search, '', $text);
  5. }
  6. return $text = mysql_real_escape_string(nl2br(trim($text)));
  7. }
  8.  
  9. echo spr_text("'';");


w efekcie otrzymałem

Cytat
\'\';


które wygenerował mi mysql_real_escape_string() wiec pytanie a ta reszta to poco? i gdzie niby usunał mi ' " ; itd?! jedynie dodał przed ' slash ale to robi sama funkcja mysql_real_escape_string()
arrtxp
Ok, dzięki.
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.