Удаление Javascript из HREF

Мы хотим разрешить «обычные» href-ссылки на другие веб-страницы, но мы не хотим, чтобы кто-либо проник в клиентские сценарии.

Ищет "javascript:" в HREF и onclick / onmouseover / и т. д. события достаточно хороши? Или есть еще что проверить?

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
3
0
197
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Вам нужно будет использовать белый список разрешенных протоколов, чтобы быть в полной безопасности. Если вы используете черный список, рано или поздно вы пропустите что-то вроде «telnet: //» или «shell:» или какую-нибудь уязвимую специфичную для браузера вещь, о которой вы никогда не слышали ...

Нет, вам нужно еще многое проверить.

Сначала URL-адрес может быть закодирован (с использованием сущностей HTML или кодировки URL-адреса, либо их комбинации).

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

В-третьих, вам нужно проверить скрипт на основе CSS, например фон: URL (javascript: ...) или ширина: выражение (...)

Возможно, я пропустил еще кое-что - будьте осторожны!

Ответ принят как подходящий

Похоже, вы разрешаете пользователям отправлять контент с разметкой. Таким образом, я бы рекомендовал взглянуть на несколько статей о предотвращении межсайтового скриптинга, которые охватывают немного больше, чем просто предотвращение вставки javascript в тег HREF. Ниже приведен один, который может оказаться полезным:

http://weblogs.java.net/blog/gmurray71/archive/2006/09/preventing_cros.html

Вы должны быть предельно осторожны при вводе данных пользователем. Вы захотите сделать белый список, как уже упоминалось, но не только с помощью href. Пример:

<img src = "nosuchimage.blahblah" onerror = "alert('Haxored!!!');" />

или же

<a href = "about:blank;" onclick = "alert('Haxored again!!!');">click meh</a>

один из вариантов - вообще запретить html и использовать то же форматирование, что и на некоторых форумах. Просто замените

[url = "xxx"]yyy[/url]

с

<a href = "xxx">yyy</a>

Это поможет вам обойти проблемы с наведением указателя мыши и т. д. Затем просто убедитесь, что ссылка начинается с протокола из белого списка и в нем нет цитаты (&quot; или что-то подобное, которое может быть расшифровано с помощью php или браузер).

Похоже, вы ищете функцию-компаньон для PHP strip_tags, то есть strip_attributes. К сожалению, это еще не написано. (Подсказка Подсказка.)

Однако в документации strip_tags есть интересное предложение:

http://www.php.net/manual/en/function.strip-tags.php#85718

Теоретически это удалит из отправленных ссылок все, что не является href, классом или идентификатором; похоже, вы, вероятно, захотите заблокировать его еще больше и просто взять hrefs.

Другие вопросы по теме