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

jak bezpieczne są sporządzone oświadczenia PDO

Ściśle mówiąc, w rzeczywistości nie ma potrzeby stosowania ucieczki, ponieważ wartość parametru nigdy nie jest interpolowana do ciągu zapytania.

Sposób działania parametrów zapytania polega na tym, że zapytanie jest wysyłane do serwera bazy danych po wywołaniu prepare() , a wartości parametrów są wysyłane później, gdy wywołasz execute() . Dlatego są one oddzielone od tekstowej formy zapytania. Nigdy nie ma możliwości wstrzyknięcia SQL (pod warunkiem, że PDO::ATTR_EMULATE_PREPARES jest fałszywe).

A więc tak, parametry zapytania pomagają uniknąć tej formy luki w zabezpieczeniach.

Czy są w 100% odporne na wszelkie luki w zabezpieczeniach? Nie, oczywiście nie. Jak być może wiesz, parametr zapytania zastępuje tylko pojedynczą wartość literału w wyrażeniu SQL. Nie możesz zastąpić listy wartości pojedynczym parametrem, na przykład:

SELECT * FROM blog WHERE userid IN ( ? );

Nie możesz użyć parametru, aby nazwać tabele lub nazwy kolumn dynamicznymi:

SELECT * FROM blog ORDER BY ?;

Nie możesz użyć parametru dla żadnego innego typu składni SQL:

SELECT EXTRACT( ? FROM datetime_column) AS variable_datetime_element FROM blog;

Jest więc sporo przypadków, w których musisz manipulować zapytaniem jako ciągiem, przed prepare() połączenie. W takich przypadkach nadal musisz pisać kod ostrożnie, aby uniknąć wstrzyknięcia SQL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Buddy — internetowe narzędzie administracyjne MySQL

  2. Co nowego w ProxySQL 2.0

  3. mysql SQL:określony element jako pierwszy, a następnie sortowanie pozostałych elementów

  4. Niepoprawny plik klucza MySQL dla tabeli tmp podczas tworzenia wielu złączeń

  5. Podzapytania z EXISTS vs IN - MySQL