Безопасность PHP $ _GET, рекомендации по безопасности $ _POST - PullRequest
2 голосов
/ 31 марта 2012

Это хорошо освещенная тема, но я хотел бы получить подтверждение методов использования данных из пользовательских переменных в нескольких различных ситуациях.

  1. Переменная никогда не используется в базе данных, никогда не сохраняется, отображается только для пользователя на экране. Какую функцию использовать, чтобы убедиться, что ни HTML, ни JavaScript не могут все испортить?

  2. Переменная берется в базу данных и используется в запросах SQL.

  3. Переменная делает оба.

На данный момент я xss_clean и strip_tags. Я всегда делал это, просто на автопилоте. Есть ли лучшая техника? Извиняюсь, если есть такой же вопрос. Я полагаю, что есть, хотя я не мог найти такой, как этот.

Приветствие.

Ответы [ 4 ]

4 голосов
/ 31 марта 2012
  1. Используйте соответствующую функцию при выводе, в контексте HTML это htmlspecialchars
  2. Используйте подготовленные заявления
  3. См. 1. и 2. - в зависимости от того, отображаете ли вы переменную или используете ее в запросе.
2 голосов
/ 31 марта 2012

Одно из худших недоверие людей PHP заключается в том, что $ _GET или $ _POST как-то связаны с безопасностью.

Важен не источник, а пункт назначения

  • Если вам приходится иметь дело с базой данных, правила всегда одинаковы, независимо от того, поступают ли данные из $ _POST, запроса SOAP или базы данных. Это должно быть ВСЕГДА одинаково: заполнители для данных, белые списки для всего остального.
  • Если вам нужно вывести некоторые данные в браузер, вы должны правильно подготовить их, независимо от того, поступают ли данные из $ _POST, запроса SOAP или базы данных.
  • Если вам нужно прочитать файл - вы должны защитить имя файла, независимо от того, откуда оно.
0 голосов
/ 18 июня 2014
$id="1;drop table users;"; $id=mysql_real_escape_string($id); $sql="SELECT * FROM table

WHERE id=$id";
0 голосов
/ 31 марта 2012
  1. В первом случае htmlspecialchars (), вероятно, является лучшим выбором, позволяя пользователям использовать все символы, такие как <,>, & и т. Д.
  2. Во втором случае вам нужно будет использоватьнекоторые функции экранирования базы данных, такие как mysql_real_escape_string или подготовленный оператор с PDO или mysqli.Подготовленные операторы - лучший выбор здесь, но если вы знакомы только с mysql, то mysql_real_escape_string тоже отлично работает.Если вы не используете mysql, то в большинстве API-интерфейсов SQL есть аналогичные функции.
  3. В третьем случае выполняйте и то, и другое, но по отдельности, и вы получите два разных результата: один для вывода и один для базы данных.

Справочные материалы:

http://php.net/manual/en/function.htmlspecialchars.php

http://php.net/manual/en/function.mysql-real-escape-string.php

http://php.net/manual/en/book.pdo.php

http://php.net/manual/en/book.mysqli.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...