2009-02-13 14 views

Odpowiedz

1

trzeba zdezynfekować wszystkie wejścia. Sposób, w jaki można to zrobić, zależy od programowania języka i/lub architektury, z którą pracujesz.

edit:

Jeśli używasz funkcji szukasz jest mysql_real_escape_string ($ string) PHP. Powinieneś użyć tego na wszystko, co otrzymasz od klienta, który powinien znaleźć się w bazie danych.

+0

Przepraszam za bycie niejasnym ... Używam PHP – johnnietheblack

+2

Nigdy nie używaj ucieczki, chyba że absolutnie nie możesz tego uniknąć. Funkcje ucieczki mogą być i były błędne, pozwalając na przeniknięcie zastrzyków. Jest praktycznie niemożliwe, aby implementatory DB popełniły taki błąd w przypadku sparametryzowanych instrukcji, dlatego są bardziej niezawodne. –

+1

Powiedziawszy to, jeśli MUSISZ użyć escaping (co oznacza, że ​​mysqli_ * z jakiegokolwiek powodu nie wchodzi w grę), mysql_real_escape_string jest rzeczywiście drogą do zrobienia. –

1

Jeśli nie używasz ramy, która zapewnia Ci odkażania narzędzi PHP ma wbudowany ciąg napisowy, powinieneś tam zacząć. Możesz znaleźć dokumentację na tej within the PHP docs for mysql real escape string. Jeśli spojrzysz na przykład trzeci, dostaniesz dobry pomysł na podstawy, które możesz zastosować.

Inną metodą, którą obserwuję, jest upewnienie się, że w razie potrzeby używam zmiennych. Na przykład jeśli mam spodziewa wejście od użytkownika, aby być liczbą całkowitą Zrobię, co następuje:

$age = (int)$age; 

Również jeśli kolumna ma być ograniczony do jednego lub dwóch wartości (na przykład kolumny, itp) upewnij się, że wymusisz to w swoim PHP przed umieszczeniem go w bazie danych.

0

Znakiem, który może stanowić problem, byłoby bezpośrednie wprowadzenie danych użytkownika i umieszczenie go w komendzie SQL.

Na przykład pytasz o nazwę użytkownika. Jeśli go weźmiesz, a następnie po prostu powiedz:

"Wybierz * od użytkowników, gdzie Nazwa użytkownika =" $ USERNAME ";"

Użytkownik może następnie dodać "JOE", Drop Table ... "i tak dalej.

w Perlu można powiedzieć coś

my $sth2 = $dbh->prepare("Insert Into HostList (HostName,PollTime,Status) values (?,?,?);"); 
$sth2->execute($Hostname,$myDate,$Status); 

Sposób wykonania będzie wtedy wyglądać na wyczyny, takie jak ten powyżej i uciec go prawidłowo.

0

Używam tej funkcji PHP na wszystkich wejściach, zanim spróbuję użyć jej w dowolnym kodzie (zapytanie MySQL, wyświetlanie danych itp.). Prawdopodobnie nie jest on kompletny, ale powinien zatrzymać wszystkie podstawowe próby włamania do systemu:

//$linkID is the link ID of the connection to the MySQL database 
function clean_input($input) 
{ 
    GLOBAL $linkID; 
    if(get_magic_quotes_gpc()) 
    { 
     //Remove slashes that were used to escape characters in post. 
     $input = stripslashes($input); 
    } 
    //Remove ALL HTML tags to prevent XSS and abuse of the system. 
    $input = strip_tags($input); 
    //Escape the string for insertion into a MySQL query, and return it. 
    return mysql_real_escape_string($input,$linkID); 
} 
8

Nie ufaj nikomu!

Sanitize wszystkie dane wejściowe - filter_var() lub wyrażeń regularnych lub in_array() prawidłowych wartości lub strategii mieszanej w zależności od typu danych.

"Wejście" oznacza dowolne źródło danych wejściowych, którego nie kontrolujesz bezpośrednio - a nie tylko formularze!

Sanitize nic wrócisz z $_GET, $_POST, $_SESSION, $_COOKIE - niczego, co mogłoby mieć jakąkolwiek możliwość bycia skażone.

I

Zastosowanie sporządziły sprawozdania

+0

$ _SESSION? Czy te dane nie są przechowywane, zapisywane i odczytywane z serwera? –

+2

Yup. Wiele witryn znajduje się na hostowanych serwerach współużytkowanych ... nie ufaj nikomu. – PartialOrder

1

To może wydawać się zdrowym rozsądkiem, ale został potknął się na niego przez chwilę.

istnieje różnica pomiędzy kodowaniahtmlentities() i ucieczkimysql_real_escape_string(). Myślałem o nich jako dość wymienne. Jednak nie ... jak zdradzi cię zdrowy rozsądek. :) Zazwyczaj najlepiej jest zastosować je oba, takie jak pierwsze kodowanie, a następnie uciec.

Następnie, wyciągając dane, odwróć proces, unescape (w razie potrzeby), a następnie kod. Uwaga, że ​​są specyficzne w sposobie wykonywania kroków (i odwrotu), pozwoli zaoszczędzić wiele bólów głowy i podwójnych ucieczek.