PHP предотвратить xss - PullRequest
       0

PHP предотвратить xss

4 голосов
/ 27 февраля 2011

Является ли htmlentities лучшим решением для предотвращения XSS в PHP?Также я хотел бы разрешить простые теги, такие как b, i, a и img.Каково было бы лучшее решение для реализации этого?Я рассматривал bbcode, но обнаружил, что если он не реализован должным образом, у меня тоже будет проблема с XSS.Что я должен делать?Приветствуется любая хорошая сторонняя библиотека.

РЕДАКТИРОВАТЬ:

Я только что попробовал очиститель HTML, и в этом случае не удалось. Просто посмотрите этот пример

Ответы [ 3 ]

3 голосов
/ 27 февраля 2011

Для этого я бы выбрал HTML Purifier , и да, вы также можете указать свои теги белого списка.

HTML Purifier - это стандартная библиотека HTML-фильтровнаписано на PHP.HTML Purifier не только удалит весь вредоносный код (более известный как XSS) с тщательно проверенным,
безопасным, но разрешающим белым списком
, но и обеспечит соответствие ваших документов стандартам, чего можно достичь только с помощьювсестороннее знание спецификаций W3C.

Я знаю, что для этого существуют определенные функции в PHP языке , но я бы предпочел выделенное решение.

2 голосов
/ 27 февраля 2011

взгляните на пользовательские языки разметки, такие как markdown (используется stackoverflow), reStructuredText , текстиль или аналогичные облегченные языки разметки

1 голос
/ 27 февраля 2011

Попробуйте использовать этот код (он допускает <i>, <b> и <del>):

<?php                                                                                                                                                                            

$html = '<b>Inline <del>context <div>No block allowed <great going </div></del></b>';                                                                                          

function escapeEveryOther(&$v, $k) {                                                                                                                                           
    if($k % 2 == 0) {                                                                                                                                                          
        $v = htmlspecialchars($v);                                                                                                                                             
    }                                                                                                                                                                          
}                                                                                                                                                                              

$parts = preg_split('`(</?(?:b|i|del)>)`is', $html, -1, PREG_SPLIT_DELIM_CAPTURE);                                                                                             
array_walk($parts, 'escapeEveryOther');                                                                                                                                        

$html = implode('', $parts);      

и затем пропустите $html через HTMLPurifier , чтобы исправить несоответствующие открытия и закрытия тегов.

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