Мне нужно предотвратить межсайтовый скриптинг (XSS). Как я могу проверить, что это не межсайтовый скрипт? Проблема связана с моим «url» BBCode.
function bbcode($input) { $search = array('/\[a url="(.+?)"\](.*?)\[\/a\]/is'); $replace = array('<a href="$1" style="color: #337ab7; text-decoration: none" target="_blank">$2 </a>'); return preg_replace($search, $replace, $input); } bbcode([a url="javascript://hello.com/%0Aalert(%27s%27)"]XSS[/url]);
Приведенный выше код является примером того, что происходит. Когда вы нажимаете на ссылку, появляется всплывающее окно JavaScript. Кроме того, в этом массиве есть больше BBCode, но я удалил их, разместив это, чтобы сделать его проще.
После общения с OP, похоже, что OP-сайт заражен XSS.
Обычно XSS поступает от плохих пользователей через форму отправки, ввод комментариев, сообщение, URL и т. Д. Поэтому нам нужно предотвратить XSS, но поскольку вам уже причинили вред, вы можете начать использовать следующую функцию, чтобы остановить выполнение сценариев, а также проанализировать и исправить ваш сайт против будущая атака.
function filterScript($content) { $default = ''; return preg_replace('/href="javascript:[^"]+"/', $default, $content); }
тестирование
Мы предполагаем, что это наш контент для атаки:
$content = '<a href="javascript://somedomain.com/%0Aalert(%27s%27)">XSS</a>'; // this link is attacked echo $content . "<br>"; // this link is not attacked echo filterScript($content);
EDIT: в дополнение к этому ответу, возможно, стоит также взглянуть на этот ответ .
Примечание . Вышеупомянутые функции помогут, но не являются полным решением, что вам действительно нужно, чтобы сделать стратегию вашего сайта, чтобы узнать о слабости и узнать, как вы должны ее защищать.
Предоставленная ссылка содержит некоторые рекомендации о том, как и где смотреть. В OWASP есть список из 10 возможных возможных нападений, которые вы должны прочитать , у них также есть новое руководство по рекомендации.