Какой вывод следует дезинфицировать?

Безопасность меня очень волнует. В последней версии моего сайта практически не было безопасности, и мы столкнулись с множеством проблем, поэтому на этот раз я хочу, чтобы все было максимально безопасно.

Весь пользовательский ввод проходит через функцию, которая удаляет теги (разрешая <p><b> и обрезает строку. Затем он загружается на сайт с помощью подготовленного оператора pdo.

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

У меня также есть определенные разделы, в которых используются теги <P> и <b> из пользовательского ввода, например обо мне в профиле пользователя и т. д. Моя функция Output_paragraph неверна?

// Output Sanitation
function output($input) {
    $output = htmlspecialchars($input);

    return $output;
}

// Paragraph Output Sanitation
function output_paragraph($input) {
    $output = htmlspecialchars($input);
    $output = htmlspecialchars_decode($output);

    return $output;
} 

person ICJ    schedule 02.06.2014    source источник
comment
Зависит от того, что на выходе. Нам нужно знать больше.   -  person Andy Lester    schedule 02.06.2014
comment
Вы, вероятно, слишком много думаете об этом. Все, что вы считаете нужным для защиты сайта, вы должны делать для защиты сайта.   -  person Giacomo1968    schedule 02.06.2014
comment
Вывод будет варьироваться от заголовков новостных статей, содержания новостных статей, имен пользователей, URL-адресов пользователей, и этот список можно продолжить.   -  person ICJ    schedule 02.06.2014
comment
Ваш output_paragraph() ничего не делает. Он кодирует их, а затем декодирует обратно в то, чем они были.   -  person Devon    schedule 02.06.2014
comment
Как мне вывести только теги ‹p› и ‹b›, когда я просто использую функцию вывода пользователя, теги p и b не форматируются должным образом, они просто отображают ‹p› ‹b›   -  person ICJ    schedule 02.06.2014
comment
Да, в этом смысл функции htmlspecialchars(). Обычно вы не хотите, чтобы пользовательский ввод интерпретировался как HTML-код из-за межсайтового скриптинга (XSS). strip_tags() позволяет исключать теги, возможно, это будет соответствовать вашей функциональности.   -  person Devon    schedule 02.06.2014
comment
Ввод дезинфицируется, используются теги полосы, и он позволяет теги p и b только с этим, я должен быть в порядке, когда дело доходит до xss, верно?   -  person ICJ    schedule 02.06.2014


Ответы (1)


Вообще говоря, выходные данные следует дезинфицировать, если им нельзя доверять. В 99% случаев это означает ввод данных пользователем. Таким образом, необработанный эхо-ввод пользователя, например, является приглашением для кого-то использовать ваш сайт, чтобы загрузить, скажем, файл атаки и обманом заставить какого-либо пользователя щелкнуть ссылку на ваш сайт, который загружает указанные данные.

htmlspecialchars — хорошее начало, но вам нужно убедиться, что вы не доверяете данным, введенным пользователем. Это означает, что вы определяете, что вы ожидаете, а затем сопоставляете это с тем, что вы можете вывести. Возможно, вам тоже нужен strip_tags. Возможно, вам нужно регулярное выражение. Не существует реального универсального ответа на вопросы безопасности.

person Machavity♦    schedule 02.06.2014