Są dwie bardzo ważne rzeczy, które musisz zrobić, aby uniknąć poważnych problemów z bezpieczeństwem.
-
Przed umieszczeniem ich w zapytaniu SQL należy zmienić znaczenie danych wprowadzonych przez użytkownika. Ucieczka oznacza uniknięcie wszystkich znaków specjalnych, takich jak
'; na szczęście istnieje funkcja, która robi to automatycznie:mysql_real_escape_string .Jeśli nie uciekniesz od wprowadzania danych przez użytkownika, mogą się zdarzyć nieprzyjemne rzeczy. Wyobraź sobie, że Twoje zapytanie to
INSERT INTO userdata VALUES ('$user_data'). Teraz wyobraź sobie, że użytkownik napisał'; DROP DATABASE userdata;.Jeśli go nie zmienisz, Twoje zapytanie zmieni się w:
INSERT INTO userdata VALUES (''; DROP DATABASE userdata;'). Jak możesz sobie wyobrazić, to nie jest dobre:jeśli masz włączoną obsługę wielu instrukcji, możesz pożegnać się ze swoją bazą danych. Nazywa się to wstrzyknięciem SQL atak. -
Kiedy wysyłasz swoją zmienną do użytkownika, musisz również odpowiednio zastąpić znaki specjalne HTML encjami HTML. Na szczęście istnieje również funkcja, która to robi:htmlspecialchars() . Przekształci specjalne znaki HTML, takie jak
<do<.Wydaje się, że jest to często niedoceniany problem, ale w rzeczywistości jest bardzo poważny. Wyobraź sobie, że
$user_datazawiera<script>SomeNastyScript()</script>. Może wykorzystać istniejące luki w zabezpieczeniach przeglądarki użytkowników lub wysłać atakującemu plik cookie inny niż HTTPOnly (który może zawierać zapisane hasła) lub nakłonić użytkownika do zapisania hasła w formularzu wygenerowanym przez manipulację DOM (możliwe w javascript) lub wiele innych złych rzeczy.Nazywa się to XSS (Cross-site scripting).
Krótka wersja
-
Zadzwoń do
mysql_real_escape_stringna łańcuchu przed wstawieniem go do zapytania SQL (ale nie wtedy, gdyecho) to). -
Zadzwoń do
htmlspecialcharsna łańcuchu przed wyświetleniem go użytkownikowi (ale nie po umieszczeniu go w bazie danych).