Najlepszy samouczek MySQL i SQL injection W 2024 r. W tym samouczku możesz dowiedzieć się Zapobieganie SQL injection,Jak wstrzyknięciu wyciągu,
Jeśli masz dane wprowadzone przez użytkownika za pośrednictwem internetu i włóż ją do bazy danych MySQL, to jest możliwe, problemy bezpieczeństwa SQL injection.
W tym rozdziale dowiesz się, jak zapobiec SQL injection i filtrować SQL injection znaków w skrypcie.
Tzw SQL injection, to za pomocą polecenia SQL do formularza internetowego składania lub wprowadź nazwę domeny lub na żądanie strony łańcucha zapytania, a ostatecznie oszukać serwer do wykonywania poleceń SQL złośliwych.
Nigdy zaufania wejściowe użytkownika, musimy zidentyfikować dane wprowadzone przez użytkownika są niepewne, wszyscy potrzeba wprowadzania danych przez użytkownika procesu filtrowania danych.
Poniższy przykład, nazwa użytkownika wpisana musi być kombinacją liter, cyfr i znaków podkreślenia, a długość nazwy użytkownika wynosi między 8-20 znaków:
if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches)) { $result = mysql_query("SELECT * FROM users WHERE username=$matches[0]"); } else { echo "username 输入异常"; }
Spójrzmy na sytuację, gdy nie ma filtra SQL pojawiają się znaki specjalne:
// 设定$name 中插入了我们不需要的SQL语句 $name = "Qadir'; DELETE FROM users;"; mysql_query("SELECT * FROM users WHERE name='{$name}'");
Powyższe stwierdzenie wtryskowego, nie mamy do filtrowania zmiennej $ name, $ nazwa nie musimy wstawić instrukcję SQL spowoduje usunięcie wszystkich danych w tabeli użytkowników.
mysql_query w PHP () nie może wykonywać wiele instrukcji SQL, ale w SQLite oraz PostgreSQL może wykonywać wiele instrukcji SQL jednocześnie, więc użytkownicy tych danych musimy ścisłą weryfikację.
Zapobiec SQL injection, musimy zwrócić uwagę na następujące punkty:
W językach skryptowych takich jak Perl i PHP można uciec od danych wprowadzonych przez użytkownika w celu uniknięcia SQL injection.
Rozszerzenie PHP MySQL udostępnia funkcję mysql_real_escape_string () do ucieczki znaki specjalne wejściowych.
if (get_magic_quotes_gpc()) { $name = stripslashes($name); } $name = mysql_real_escape_string($name); mysql_query("SELECT * FROM users WHERE name='{$name}'");
jak zapytania, jeśli użytkownik wprowadzi wartość "_" i "%", to się dzieje: Użytkownik po prostu staramy zapytania "abcd_", tam wyniki kwerendy "abcd _", "ABCDE", "abcdf" itp użytkownikowi na zapytanie "30%" (uwaga: trzydzieści procent) będzie miał problemy.
W skrypcie PHP, możemy użyć addcslashes () do obsługi powyższym przypadku, następujące przykłady:
$sub = addcslashes(mysql_real_escape_string("%something_"), "%_"); // $sub == \%something\_ mysql_query("SELECT * FROM messages WHERE subject LIKE '{$sub}%'");
addcslashes () funkcję przed podano odwrotnym ukośnikiem.
Składnia:
addcslashes(string,characters)
parametry | opis |
---|---|
sznur | Wymagany. Aby sprawdzić czy podany ciąg znaków. |
znaków | Opcjonalne. Przepisane przez addcslashes () wpływa na znaki lub zakresy znaków. |
Można zobaczyć specjalny wniosek: te addcslashes PHP () funkcja