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

PHP защитена потребителска променлива

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

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

    Ако не избягате от въвеждането на потребителя, могат да се случат неприятни неща. Представете си, че вашата заявка е INSERT INTO userdata VALUES ('$user_data') . Сега си представете, че потребителят е написал '; DROP DATABASE userdata; .

    Ако не го избегнете, вашата заявка ще бъде:INSERT INTO userdata VALUES (''; DROP DATABASE userdata;') . Както можете да си представите, това не е добре:ако имате активирани няколко изявления, можете да се сбогувате с вашата база данни. Това се нарича SQL инжекция атака.

  2. Когато извеждате вашата променлива на потребителя, вие също трябва правилно да замените HTML специалните знаци с HTML обекти. За щастие има функция, която да направи и това:htmlspecialchars() . Той ще трансформира специалните HTML знаци като < до < .

    Това изглежда е проблем, който често се подценява, но в действителност е много сериозен. Представете си, ако $user_data съдържа <script>SomeNastyScript()</script> . Той може да използва съществуващите уязвимости в браузъра на вашите потребители или може да изпрати бисквитка, която не е HTTPOnly (която може да съдържа запазени пароли) на нападателя, или може да подмами потребителя да напише паролата си във формуляр, генериран чрез манипулиране на DOM (възможно в javascript) или много други лоши неща.

    Това се нарича XSS (Скриптове между сайтове).

Кратка версия

  1. Обадете се на mysql_real_escape_string на низа, преди да го вмъкнете във вашата SQL заявка (но не и когато echo то).

  2. Обадете се на htmlspecialchars върху низа, преди да го покаже на потребителя (но не и когато го поставите в базата данни).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Колона с по-висока мощност първа в индекс, когато включва диапазон?

  2. MySQL през 2018 г.:Какво има в 8.0 и други наблюдения

  3. PHP PDO как да стартирате заявка за множество заявки?

  4. utf8mb4_unicode_ci срещу utf8mb4_bin

  5. MySQL група от SUM