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

Атака с инжектиране, която е успешна с mysql_query, но неуспешна с mysqli_query

Накараха ме да вярвам, че:

$selection = mysql_query($dblink, "SELECT * FROM table WHERE name='$idValue' ");

може лесно да бъде компрометиран със стойности за $idValue които затварят ' и след това добавете допълнителни команди, като

$idValue = "z'; DELETE * FROM table WHERE name IS NOT NULL";

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

  $idValue = "z' OR name IS NOT NULL OR name = 'x";

Докато при MySQLi има възможност че подходът може да се използва с prepared statements , което би попречило на променливата да действа извън статуса си само като променлива. Като например:

mysqli->prepare("SELECT * FROM tables WHERE name = ? LIMIT 1");
mysqli->bind_param("s",$idValue);
mysqli->execute();

Моето разбиране за bind_param е, че променливата ще има изключени всички ключови думи и ключови знаци на MySQL, като по този начин се предотвратява пробивът в сигурността и връщането на неоторизирани редове.

Това е избор, който MySQL няма . Подготвените изявления помагат за подобряване сигурност на инжектирането, но те няма дапредотвратят само атаки с инжектиране, но повече трябва да се използват като част от по-широка стратегия от програмиста.

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

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

Резюме

Ако пишете MySQLi операторите по същия начин, както сте написали MySQL операторите, тогава няма да имате допълнителна защита от инжекции. Въпреки това MySQLi предлага Подготвените изявления подход, който значително увеличава защитата срещу 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. MacOSX:автоматично стартиране на mysql при стартиране

  2. Най-добри практики за оптимизиране на LAMP сайтове за скорост?

  3. извличане на максимален брой едновременни телефонни обаждания от call_log

  4. Настройка на размера на страницата в Innodb

  5. Използване на Boto3 за взаимодействие с amazon Aurora на RDS