Должен ли я XSS фильтровать все входные данные?

У меня есть скрипт, который возвращает данные POST, если они существуют, например:

public function post($key){
if(isset($_POST[$key])){
return $_POST[$key];
}else{
return false;
}
}

// Will return false if index doesn't exist
echo $this->class->post("key");

Мне было интересно, если рекомендуется фильтровать все в этой функции (с использованием библиотеки XSS, такой как htmlpurifier), если индекс существует? У меня есть функция, которая делает то же самое для запросов на получение тоже.

Спасибо,

Питер

0

Решение

Это должно работать для обеспечения безопасности вашего приложения, так как никакой пользовательский ввод (кроме редактируемого пользователем $ _FILE, $ _SERVER) не будет восприимчив к XSS, если в вашей библиотеке не было сбоев. Однако это может отрицательно повлиять на производительность ваших серверов, если многие люди пытаются получить доступ к вашему приложению. Я написал бы лучшую функцию как это:

public function post($key, $validate = true){
if(isset($_POST[$key])){
if($validate===true) {
return validate($_POST[$key]);
} else {
return $_POST[$key]
}else{
return false;
}
}

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

1

Другие решения

Вам следует дезинфицировать весь вывод для предотвращения XSS.

Использовать htmlentities PHP функция для этого.

фильтрация или проверка Можно быть сделано на входе, однако акцент должен всегда быть на санации продукции. Например, при вводе вы можете проверить, что номер телефона содержит только цифры и следующие символы ()- #,

На выходе вы всегда должны правильно санировать в зависимости от контекста. Например, при выводе в HTML:

<?php
echo htmlentities("<script>")
?>

будет выводить

&lt;script&gt;

на страницу вместо <script> тег.

Проверять, выписываться Шпаргалка по профилактике OWASP XSS (межсайтовый скриптинг) для более подробной информации.

1

По вопросам рекламы [email protected]