Jak zapobiec wstrzyknięciu SQL w PHP
- 3770
- 743
- Ignacy Modzelewski
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"; |
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.
1 | $ query = "Wybierz liczbę rachunków, saldo z rachunków, w których rachunek = 0 lub 1 = 1"; |
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 (); |
- « Jak zainstalować serwer poczty pocztowej na Ubuntu 16.04 i 14.04
- Jak zainstalować edytor kodów Visual Studio w SEL & OpenSuse »