Mysql
 sql >> база данни >  >> RDS >> Mysql

PHP / MySQLi:Как да предотвратите SQL инжектиране на INSERT (кодът работи частично)

В Нов PHP код snippet, вие все още сте уязвими към инжекции.
Вие използвате подготвено изявление във вмъкната част, но всъщност не използвате правилно силните страни на препаратите.

Когато създавате подготвен израз, вие създавате заявка, в която добавяте контейнери вместо необработените стойности:

$stmt = $conn->prepare("INSERT INTO Users (email, pw) VALUES (?, ?)");

Въпросителните знаци са заместителите и по-късно се заменят с помощта на bind_param метод:

$stmt->bind_param('ss', $email, $pw);

ss част от извикването за свързване казва на mysql db, че неговите два низа, които се предават на базата данни (s за string , i за int и т.н.).
Вие обвързвате параметър ($name ), но няма заместител, нито някакъв тип препратка в заявката..?

Вашият оператор select от друга страна все още не е безопасен и отворен за уязвимости.
Вероятно бих използвал подготвен оператор там, точно както с частта за вмъкване.

Винаги искате да сте сигурни, че въвеждането от потребителя е "безопасно" за базата данни, ако свържете низ на заявка и добавите потребителски вход в него, базата данни няма да избегне низовете, тя просто ще я изпълни.

Използвайте само стандартна query извиквания на метод, когато сами пишете пълната заявка, без никакви входни параметри и особено без входни параметри, които потребителят е подал!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL5.6 заседна в процеса, опитвайки се да стартира услугата

  2. Как да използвате външни ключове с PHP

  3. Колона „Update Timestamp“ на MySQL – тригер

  4. PHP формуляри не вмъкват данни в MySQL

  5. Научете как да използвате няколко функции на MySQL и MariaDB – част 2