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

Защита от SQL инжекция

Това не какво представлява SQL инжекцията. Всеки път, когато използвате параметри, които не са били дезинфекцирани във вашата SQL заявка, вие оставяте базата си данни отворена за SQL инжектиране, което може непременно да има за цел унищожаване на данни. Това може също да бъде кражба на данни или получаване на неоторизиран достъп.

Помислете за много ограничен акаунт, където всичко, което може да направи, е SELECT . Пишете заявка за удостоверяване:

$sql = "SELECT COUNT(*) AS count
          FROM users 
         WHERE user_id='{$_POST['user']}' AND pass='{$_POST['password'}'";

// check if returns a count of 1, if yes, log in

При нормално въвеждане очаквате заявката да изглежда така:

SELECT COUNT(*) AS count
  FROM users 
 WHERE user_id = 'username' AND pass='********'

Което трябва да върне 1 като брой, ако и потребителското име, и пасът съвпадат. Сега нападател се опитва да влезе като администратор. Тъй като не сте дезинфекцирали въведените си данни, те изпращат $_POST['user'] като:admin'; -- . Цялата заявка става:

SELECT COUNT(*) AS count
  FROM users 
 WHERE user_id = 'admin'; -- AND pass='********'

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

Накратко, имам акаунт за цялото приложение с ограничени привилегии (напр.:без DROP , ALTER и т.н.) е добро. Никога не давайте на никого или на някое приложение повече привилегии, отколкото са му необходими. Но за да предотвратите 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 инжекция чрез добавяне на втора заявка?

  2. $_SESSION безопасен ли е от sql инжектиране?

  3. Как да определите дали използвате SSL в MySql връзка?

  4. Как да вмъкнете ред в таблица между два съществуващи реда в Sql

  5. Свързване на html форма с php страница според първичния ключ