Jak zapobiec wstrzyknięciu SQL w PHP

Jak zapobiec wstrzyknięciu SQL w PHP

Ten samouczek pomoże ci zapobiec wstrzykiwaniu SQL w PHP. W tym samouczku najpierw sprawdź podstawowy przykład procesu wtrysku SQL. W jaki sposób użytkownicy mogą ukraść dane z Twojej witryny za pomocą wtrysku SQL? Ten samouczek zawiera również metody zapobiegania wstrzyknięciu SQL za pomocą sterowników PHP-MYSQLI i PHP-PDO.

Prosty przykład wstrzyknięcia SQL

Na przykład posiadaj stronę internetową dla banku. Dostarczałeś interfejs internetowy klientom banku, aby wyświetlić numer konta i saldo. Twoja witryna bankowa korzysta z adresu URL, takiej jak http: // przykład.com/get_account_details.php?ConcT_ID = 102 Aby pobrać szczegóły z bazy danych.

Na przykład get_account_details.php mieć kod coś takiego poniżej.

$ concTId = $ _get ['concT_ID']; $ query = "Wybierz liczbę rachunków, saldo z rachunków, w których rachunek = $ conctainId";
12$ concTiDId = $ _GET ['concT_ID']; $ query = "Wybierz rachunek konta, saldo z rachunków, gdzie ConcTIDID = $ concTiDId";

Klienci Concation jest przekazywane przez ciąg zapytania jako konto_d. Podobnie jak powyżej URL, jeśli identyfikator konta użytkownika 102 i przekazał to w ciągu zapytania. Skrypt PHP utworzy zapytanie jak poniżej.

$ query = "Wybierz liczbę rachunków, saldo z rachunków, w których rachunek = 102";
1$ query = "Wybierz liczbę rachunków, saldo z rachunków, w których rachunek = 102";
Szczegóły pobierane dla określonego konta.

Dane rachunkowe i bilansowe są pobierane dla konta 102 i dostarczane klientom, ponieważ pokazuje się na powyższym zrzucie ekranu.

Załóżmy, że kolejny scenariusz - Over Smart Klient przekazał konto_d 0 lub 1 = 1 w ciągu zapytania. Co się teraz stanie? Skrypt PHP utworzy zapytanie jak poniżej i wykonane w bazie danych.

$ query = "Wybierz liczbę rachunków, saldo z rachunków, w których rachunek = 0 lub 1 = 1";
1$ query = "Wybierz liczbę rachunków, saldo z rachunków, w których rachunek = 0 lub 1 = 1";
Szczegóły pobierane dla wszystkich kont

Spójrz na zapytanie utworzone przez skrypt i wyniki zwrócone przez bazę danych. Możesz zobaczyć, że to zapytanie zwróciło wszystkie numery kont i dostępne saldo.

Nazywa się to wstrzyknięciem SQL. To jest prosty scenariusz, może istnieć szereg metod wykonywania zastrzyków SQL. Poniżej samouczek pomoże Ci zapobiec wstrzyknięciu SQL za pomocą sterownika PHP MySQLI i kierowcy PHP PDO.

#1. Korzystanie z sterownika PHP-MYSQLI

Możesz użyć instrukcji przygotowanych przez kierowcę PHP-MYSQLI, aby uniknąć tego typu zastrzyków SQL. Użyj poniżej kodu PHP, który zapobiegnie wstrzyknięciu SQL.

$ concTId = $ _get ['concT_ID']; if ($ stmt = $ mysqli-> przygotuj ('Wybierz liczbę konta, saldo z kont, gdzie concTID = ?')) $ stmt-> bind_param („s”, $ accountId); $ stmt-> execute (); $ wynik = $ stmt-> get_result (); while ($ row = $ wynik-> fetch_assoc ()) // zrób coś tutaj $ stmt-> close ();
12345678910111213141516$ concTId = $ _get ['concT_ID']; if ($ stmt = $ mysqli-> przygotuj ('Wybierz liczbę konta, saldo z kont, gdzie concTID = ?')) $ stmt-> bind_param („s”, $ accountId); $ stmt-> execute (); $ wynik = $ stmt-> get_result (); while ($ row = $ wynik-> fetch_assoc ()) // zrób coś tutaj $ stmt-> close ();

#2. Za pomocą sterownika PHP-PDO

Możesz użyć sterownika PHP-PDO, przygotowuj instrukcje, aby uniknąć tego typu zastrzyków SQL. Użyj poniżej kodu PHP, który rozwiąże powyżej zastrzyków SQL.

$ concTId = $ _get ['concT_ID']; if ($ stmt = $ pdo-> przygotuj ('Wybierz rachunek konta, saldo z kont, gdzie ConcTIDID =: Conccount')) $ stmt-> execute (array ('name' => $ name)); foreach ($ stmt as $ row) // zrób coś tutaj $ stmt-> close ();
123456789101112$ concTId = $ _get ['concT_ID']; if ($ stmt = $ pdo-> przygotuj ('Wybierz rachunek konta, saldo z kont, gdzie ConcTIDID =: Conccount')) $ stmt-> execute (array ('name' => $ name)); foreach ($ stmt as $ row) // zrób coś tutaj $ stmt-> close ();