htmlentities
(или htmlspecialchars
) и addslashes
(или mysql_real_escape_string
(или другая соответствующая база данных функция экранирования); добавление не всегда является ошибкой) не имеют ничего общего с параметрами GET/POST. Они являются выходными функциями, вход которых может быть исходить из параметров, но может также поступать из других источников, таких как статическая строка или строка, извлеченная из базы данных.
В настоящее время я использую их как для каждого параметра get/post.
Нет, это не работает. Это распространенная ошибка, и одна из них увековечена большим количеством ужасающего учебника по PHP. Пытаясь отделить проблему отведения строки в один маленький цикл вместо того, чтобы распространяться по всему коду, звучит неплохо, но переключение строк в действительности не работает. Вам нужно применить правильную форму экранирования и только правильную форму экранирования при каждом вводе строки внутри другой строки. Вы не можете сделать это заранее.
Не пытайтесь «дезинфицировать» или «фильтровать» все входящие параметры для кодирования или удаления таких символов, как \
или <
. Это приведет к заполнению вашего приложения мусором, как \\\\\\\\\\\\\\\\\\\\\\\\\\
и &amp;amp;amp;amp;amp;amp;
.Вместо этого вы должны только кодировать их - вместе с любыми другими варибелями, которые не поступают из GET/POST, - в последнюю минуту, когда выплевывают их в другой контекст текста, например htmlspecialchars
для HTML или mysql_real_escape_string
для строковых литералов MySQL. Обычно вам лучше с параметризованными запросами, что позволяет избежать проблем с экранированием SQL.
Это не означает, что вы не должны проверять свои входящие данные в соответствии с требованиями вашего приложения. Если у вас есть поле, на которое вы рассчитываете получить целое число, обязательно используйте его перед использованием. intval
. Если у вас есть простая текстовая строка в одной строке, которую вы не ожидаете содержать новые строки, обязательно отфильтруйте символ \n
из строки вместе со всеми другими управляющими символами [\x00-\x1F\x7F]
. Но это требования приложений, а не то, что вы можете обязательно использовать во всех своих входных данных.
'addslashes()' делает ** не ** предотвратить инъекции SQL! На этом сайте есть много сообщений об этом. –