Никогда (когда-либо) доверие к иностранному вводу вводилось в ваш PHP-код. Всегда дезинфицируйте и проверяйте внешний ввод, прежде чем использовать его в коде. Функции filter_var и filter_input могут дезинфицировать текст и проверять текстовые форматы (например, адреса электронной почты).
Вклад может быть любым: входные данные формы $ _GET и $ _POST, некоторые значения в superglobal $ _SERVER и тело запроса HTTP через fopen ('php: // input', 'r'). Помните, что иностранный ввод не ограничивается формой данных, представленных пользователем. Загруженные и загруженные файлы, значения сеанса, данные cookie и данные сторонних веб-сервисов также являются иностранными.
Хотя зарубежные данные могут быть сохранены, объединены и доступны позже, это по-прежнему иностранный ввод. Каждый раз, когда вы обрабатываете, выводите, объединяете или включаете данные в свой код, спрашивайте себя, правильно ли фильтруются данные и могут ли они быть доверенными.
Данные могут быть отфильтрованы по-разному в зависимости от его назначения. Например, когда нефильтрованный внешний вход передается в вывод HTML-страницы, он может выполнять HTML и JavaScript на вашем сайте! Это называется Cross-Site Scripting (XSS) и может быть очень опасной атакой. Один из способов избежать XSS - дезинформировать все пользовательские данные, прежде чем выводить их на вашу страницу, удалив теги HTML с помощью функции strip_tags или экранируя символы со специальным значением в их соответствующие объекты HTML с помощью функций htmlentities или htmlspecialchars.
Другой пример - это параметры, которые необходимо выполнить в командной строке. Это может быть чрезвычайно опасно (и обычно это плохая идея), но вы можете использовать встроенную функцию escapeshellarg для дезинфекции аргументов исполняемой команды.
В качестве последнего примера используется ввод иностранного ввода для определения файла для загрузки из файловой системы. Это можно использовать, изменив имя файла на путь к файлу. Вам нужно удалить «/», «../», пустые байты или другие символы из пути к файлу, чтобы он не мог загружать скрытые, непубличные или чувствительные файлы.
Подробнее о фильтрации данных (http://www.php.net/manual/en/book.filter.php)
Узнайте о filter_var (http://php.net/manual/en/function.filter-var.php)
'htmlentities()' не является идеальным решением для всех XSS – Jakub
Это потому, что вы поклонник Барселоны. Много горьких людей. – SomeShinyObject
Хорошая статья для предотвращения xss .. http://www.ibm.com/developerworks/web/library/wa-secxss/ надеюсь, что это поможет. –