Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Zabezpieczenie
Forum PHP.pl > Forum > Przedszkole
PhoenixPL
Mam pytanie czy dobrze sadze ze taka funkcja zabezpieczy mnie przed wpisywanie kodu SQL do pól textarea questionmark.gif

  1. <?php
  2. function replace_code_mysql($text)
  3. {
  4. $code_mysql = array('[Ss][Ee][Ll][Ee][Cc][Tt]',  // select
  5. '[Nn][Uu][Ll][Ll]',  // null
  6. '[Dd][Ee][Ll][Ee][Tt][Ee]',  // delete
  7. '[Ii][Nn][Ss][Ee][Rr][Tt]',  // insert
  8. '[Ff][Rr][Oo][Mm]',  // from
  9. '[Uu][Pp][Dd][Aa][Tt][Ee]',  // update
  10. '[Ww][Hh][Ee][Rr][Ee]',  // where
  11. '[Dd][Rr][Oo][Pp]',  // drop
  12. '[Ss][Hh][Oo][Ww]',  // show
  13. '[Aa][Ll][Tt][Ee][Rr]',  // alter
  14. '[Ii][Nn][Tt][Oo]',  // into
  15. '[Vv][Aa][Ll][Uu][Ee][Ss]',  // values
  16. '[Ss][Ee][Tt]',  // set
  17. '[Uu][Nn][Ii][Oo][Nn]'); // union
  18. while(list($number, $tablica) = each($code_mysql))
  19. {
  20. $text = preg_replace("%$tablica%", " ", $text);
  21. }
  22. return $text;
  23. }
  24. ?>

I później mam cosik takiego

  1. <?php
  2. $login_POST = replace_code_mysql($_POST['login']);
  3. $password_POST = replace_code_mysql(md5($_POST['password']));
  4. ?>


Czy jest coś co jeszcze trzeba w niej zmienić questionmark.gif
dr_bonzo
  1. <?php
  2. $sql = "SELECT * FROM users WHERE name = '" . mysql_real_escape( $text ) . "' AND password = '" . mysql_real_escape( $password ) . "'";
  3. ?>


Sprobuj to zhakowac jakims $text'em z np. SELECT czy komentarzem.

Np. podanie $text = 'User --' nie spowoduje wykomentowania dalszej czesci zapytania:

  1. SELECT * FROM users WHERE name = 'User --' AND password = .....




Jesli ten $text przerzucisz przez escape i umiescisz wewnatrz ' i ' to wszystko bedzie ok. Liczby przepuszczasz przez intval() lub floatval() (zalezy czego potrzebujesz) i juz. Tyle zabezpieczen.
Poszukaj watku o SQL Injection na forum.
Jarod
Cytat(dr_bonzo @ 11.06.2006, 13:18 ) *
Jesli ten $text przerzucisz przez escape i umiescisz wewnatrz ' i ' to wszystko bedzie ok.

A gdyby zmiennej nie umieszczał w apostrofach? Też nic się nie stanie.
em1X
Miedzy apostrofy nie umieszczasz tylko liczb (a te traktuj intval jak wspomniał przedmówca)
Jarod
O traktowaniu liczb intval wiem.
Cytat(em1X @ 11.06.2006, 13:28 ) *
Miedzy apostrofy nie umieszczasz tylko liczb(a te traktuj intval jak wspomniał przedmówca)

Nie rozumiem o co Ci chodzi biggrin.gif

Tam gdzie jest tekst dajemy apostrofy. Tam gdzie liczba nie. Np:

  1. $sql = 'SELECT * FROM jakastabela WHERE imie=''.$tekstUzytkownika.''';


  1. $sql = 'SELECT * FROM jakastabela WHERE wiek='.$wiekUzytkownika;


Oczywiście wcześniej zmienne $tesktUzytkownika i $wiekUzytkownika zostają przefiltrowane.
SongoQ
Powinno sie wszystko pakowac w string i tak bazka sobie rzutuje to i dopasowuje do typu. Zastosuj tak jak pisal @dr_bonzo
dr_bonzo
Cytat
Powinno sie wszystko pakowac w string i tak bazka sobie rzutuje

I tak wszystko jest wysylane stringiem bo konkaten.... tongue.gif laczymy stringi z liczbami co nam daje stringa smile.gif A rzutowanie w php gwarantuje to ze liczby beda liczbami.
Jarod
Cytat(SongoQ @ 11.06.2006, 18:51 ) *
Powinno sie wszystko pakowac w string i tak bazka sobie rzutuje to i dopasowuje do typu. Zastosuj tak jak pisal @dr_bonzo


Cytat
Single quotes should be used for all other strings. Scripts using single quotes run slightly faster because the php parser can include the string directly. Double quoted strings are slower because they need to be parsed.


Źródło: http://www.zend.com/zend/tut/using-strings.php

@dr_bonzo: dr_bonzo: Jeśli zastosujesz filtrowanie danych to mój sposób też jes bezpieczny i delikatnie wydajniejszy.
PhoenixPL
A czy musze dawać też te funkcje przy dodawaniu do bazy, update i usówaniu questionmark.gif Czy tylko przy wybieraniu z bazy questionmark.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.