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

Потребителски въведени данни, почистете и дезинфекцирайте преди изпращане в db

Първо, поддържайте текста логичен и чист:

trim() -- OK
htmlentities($comment, ENT_NOQUOTES)  -- No; do later
mysqli_real_escape_string()  -- Yes; required by API
nl2br()  -- No; see below

Логиката зад тези препоръки:Данните в базата данни трябва да са просто обикновени данни. Не htmlentities, не br-tags. Но трябва да направите escape_string, за да предадете данни от PHP към MySQL; изходите няма да бъдат съхранени.

Но... Това е само средната стъпка. Откъде дойдоха данните? По-старите версии на PHP се опитват да "защитят" добавянето на escapes и други боклуци, които работят добре за HTML, но прецакват MySQL. Изключете такова магическо бягство и вземете необработените данни.

Къде отиват данните? Вероятно HTML? След SELECTing данните обратно от таблицата, след това първо направете htmlentities() и (по избор) nl2br();

Обърнете внимание, ако очаквате да запазите неща като <I> (за курсив), вие искате неприятности - големи проблеми. Всичко, което хакерът трябва да направи, е <script> ... за да инжектирате всякакви гадости във вашата уеб страница и евентуално в цялата ви система.



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

  2. Django manage.py syncdb хвърля Няма модул с име MySQLdb

  3. Последни дейности на потребителя - PHP MySQL

  4. Съхранение на HTML в MySQL:blob или текст?

  5. Изпращане на данни от javascript към mysql база данни