Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Ochrona przed wstrzykiwaniem SQL za pomocą tylko str_replace

Ten odosobniony przykład jest niewrażliwy na wstrzyknięcie.

Musisz jednak zdać sobie sprawę, że ochrona przed wstrzyknięciem sql nie jest tylko zamianą znaków . A okoliczności mogą różnić się od tych, które w tej chwili uważasz za oczywiste. Tak więc Twój kod stałby się narażony na dłuższą metę, z powodu podstawowych wad tej metody :

  • zastępowanie znaków to tylko część wymaganego formatowania
  • to konkretna zamiana może być zastosowana tylko do ciągów, pozostawiając inne części całkowicie niechronione.
  • takie zastąpienie jest zewnętrzne w stosunku do wykonania zapytania, co oznacza, że ​​jest podatne na wszelkiego rodzaju błędy ludzkie.
  • takie zamiana jest zasadniczo odłączalną miarą, co oznacza, że ​​może zostać przesunięta zbyt daleko od rzeczywistego wykonania zapytania i ostatecznie zapomniana.
  • ten rodzaj ucieczki jest podatny na atak kodujący , przez co rozwiązanie jest zbyt ograniczone w użyciu.

Nie ma nic złego w zastępowaniu znaków per se, ale tylko wtedy, gdy jest używane jako część pełnego formatowania; zastosowane do właściwej części zapytania; i wykonywane przez sterownik bazy danych, a nie programistę; tuż przed wykonaniem.

Funkcje, które zaproponowałeś w komentarzach są dobrym krokiem, ale wciąż niewystarczającym, ponieważ są przedmiotem wymienionych powyżej wad, co czyni je podatnymi na wszelkiego rodzaju ludzkie błędy.

Wstrzyknięcie SQL nie jest jedynym problemem związanym z tym podejściem, jest to również błąd użyteczności, ponieważ ta funkcja albo zepsułaby twoje dane, gdyby była używana jako wcielenie późnego magiczne cytaty , lub rozdęty kod, jeśli jest używany do formatowania każdej zmiennej bezpośrednio w kodzie aplikacji.

Takie funkcje mogą być używane tylko do przetwarzania symbolu zastępczego , ale oczywiście nie za pomocą domowej funkcji zamiany, ale odpowiedniej funkcji dostarczanej przez API bazy danych.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak profilować MySQL

  2. znaleźć w zestawie w laravelu ? przykład

  3. CodeIgniter - Pogrupuj według zamówienia, nie działając zgodnie z oczekiwaniami

  4. Jak szukać ukośnika (\) w MySQL? i dlaczego ucieczka (\) nie jest wymagana dla gdzie (=), ale dla Like jest wymagana?

  5. Proste pytanie mysql dotyczące kluczy podstawowych i insertu