Jak MySQL zapobiega wstrzykiwaniu sql? Zasada i zapobieganie wstrzykiwaniu SQL

MySQLJak zapobiec wstrzykiwaniu sql? Zasada i zapobieganie wstrzykiwaniu SQL

MySQL i wstrzyknięcie SQL

Jeśli weźmiesz dane wprowadzone przez użytkownika za pośrednictwem strony internetowej i wstawisz je doBaza danych MySQL, mogą wystąpić problemy z bezpieczeństwem iniekcji SQL.

W tym rozdziale dowiesz się, jak zapobiegać wstrzykiwaniu SQL i używać skryptów do filtrowania wstrzykiwanych znaków w SQL.

Tak zwane wstrzykiwanie SQL polega na oszukaniu serwera w celu wykonania złośliwych poleceń SQL poprzez wstawienie poleceń SQL do formularza internetowego w celu przesłania lub wprowadzenia ciągu zapytania dotyczącego nazwy domeny lub żądania strony.

Nigdy nie powinniśmy ufać danym wprowadzanym przez użytkownika, musimy zakładać, że dane wejściowe użytkownika są niebezpieczne i wszyscy musimy filtrować dane wejściowe użytkownika.

W poniższym przykładzie wprowadzona nazwa użytkownika musi być kombinacją liter, cyfr i podkreśleń, a nazwa użytkownika musi mieć od 8 do 20 znaków:

if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches))
{
   $result = mysqli_query($conn, "SELECT * FROM users 
                          WHERE username=$matches[0]");
}
 else 
{
   echo "username 输入异常";
}

Przyjrzyjmy się sytuacji SQL, która występuje, gdy znaki specjalne nie są filtrowane:

// 设定$name 中插入了我们不需要的SQL语句
$name = "Qadir'; DELETE FROM users;";
 mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");

W powyższej instrukcji injection nie filtrowaliśmy zmiennej $name, w $name wstawiamy instrukcję SQL, której nie potrzebujemy, co spowoduje usunięcie wszystkich danych z tabeli users.

mysqli_query() w PHP nie może wykonywać wielu instrukcji SQL, ale SQLite i PostgreSQL mogą wykonywać wiele instrukcji SQL jednocześnie, więc musimy ściśle weryfikować dane tych użytkowników.

Aby zapobiec wstrzyknięciu SQL, musimy zwrócić uwagę na następujące punkty:

  • 1. Nigdy nie ufaj wpisom użytkowników.Sprawdź dane wejściowe użytkownika, możesz użyć wyrażeń regularnych lub ograniczyć długość; konwertuj pojedyncze cudzysłowy i podwójne „-” itp.
  • 2. Nigdy nie używaj dynamicznego zestawu sql, możesz użyć sparametryzowanego sql lub bezpośrednio użyć procedur składowanych do zapytań i dostępu do danych.
  • 3. Nigdy nie używaj połączeń z bazą danych z uprawnieniami administratora, używaj oddzielnych połączeń z bazą danych z ograniczonymi uprawnieniami dla każdej aplikacji.
  • 4. Nie przechowuj bezpośrednio poufnych informacji, nie szyfruj ani nie mieszaj haseł i poufnych informacji.
  • 5. Informacje o wyjątku aplikacji powinny zawierać jak najmniej wskazówek, a najlepiej jest użyć niestandardowych informacji o błędzie, aby zawinąć oryginalne informacje o błędzie
  • 6. Metoda wykrywania iniekcji sql na ogół przyjmuje pomoc;OprogramowanieLub platforma witryny do wykrycia, oprogramowanie zazwyczaj wykorzystuje narzędzie do wykrywania wstrzyknięć sql jsky, platforma witryny ma narzędzie do wykrywania platformy bezpieczeństwa witryny Yisi. MDCSOFT SCAN i in.Korzystanie z MDCSOFT-IPS może skutecznie bronić się przed wstrzyknięciem SQL, atakami XSS itp.

Zapobiegaj wstrzykiwaniu SQL

W językach skryptowych, takich jak Perl i PHP, można uciec przed danymi wprowadzonymi przez użytkownika, aby zapobiec wstrzyknięciu SQL.

Rozszerzenie MySQL dla PHP udostępnia funkcję mysqli_real_escape_string() do zmiany specjalnych znaków wejściowych.

if (get_magic_quotes_gpc()) 
{
  $name = stripslashes($name);
}
$name = mysqli_real_escape_string($conn, $name);
 mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");

Wstrzyknięcie w podobnych oświadczeniach

Podczas zapytania na przykład, jeśli użytkownik wprowadzi wartości z „_” i „%”, stanie się tak: użytkownik pierwotnie chciał zapytać „abcd_”, ale wyniki zapytania obejmują „abcd_”, „abcde” i „abcdf " Itd.; problem występuje również, gdy użytkownik chce zapytać "30%" (uwaga: trzydzieści procent).

W skrypcie PHP możemy użyć funkcji addcslashes() do obsługi powyższej sytuacji, jak w poniższym przykładzie:

$sub = addcslashes(mysqli_real_escape_string($conn, "%something_"), "%_");
// $sub == \%something\_
 mysqli_query($conn, "SELECT * FROM messages WHERE subject LIKE '{$sub}%'");

Funkcja addcslashes() dodaje ukośnik odwrotny przed podanym znakiem.

Format składni:

addcslashes(string,characters)
参数opis
ciągWymagany.Określa ciąg do sprawdzenia.
znakówOpcjonalny.Określa znak lub zakres znaków, na które ma wpływ addcslashes().

Nadzieja Chen Weiliang Blog ( https://www.chenweiliang.com/ ) udostępniono „Jak MySQL zapobiega wstrzykiwaniu sql? zasada wtrysku sql i zapobieganie”, to ci pomoże.

Zapraszamy do udostępnienia linku do tego artykułu:https://www.chenweiliang.com/cwl-500.html

Witamy na kanale Telegram bloga Chen Weiliang, aby uzyskać najnowsze aktualizacje!

🔔 Bądź pierwszą osobą, która otrzyma cenny „Przewodnik po użyciu narzędzia AI do marketingu treści ChatGPT” w głównym katalogu kanału! 🌟
📚 Ten przewodnik zawiera ogromną wartość, 🌟To rzadka okazja, nie przegap jej! ⏰⌛💨
Udostępnij i polub, jeśli chcesz!
Twoje udostępnianie i polubienia to nasza ciągła motywacja!

 

发表 评论

Twoj adres e-mail nie bedzie opublikowany. 必填 项 已 用 * 标注

przewiń na górę