[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Предотвратить javascript в ссылке
lysosutrin2
В моем проекте пользователь вводит адрес некой ссылки в текстовое поле. Адрес заносится в базу данных, а потом выводит эту ссылку на главной странице. Проблема в том, что пользователь может ввести такой текст: "javascript: for(i = 0; i < 9999; i++) alert(i);", а ссылка выйдет такой:
<a href='javascript: for(i = 0; i < 9999; i++) alert(i);'>Some text</a>

Как предотвратить javascript код?



Спустя 18 минут, 35 секунд (3.02.2012 - 16:17) Nikitian написал(а):
Проверять введённый адрес через parse_url()

Спустя 3 минуты, 52 секунды (3.02.2012 - 16:21) SerginhoLD написал(а):
Winston, он имеет ввиду что пользователь вводит параметр href ссылки, который пишется в базу, если я правильно понял )


lysosutrin2
ну можно проверить, что стоит в начаче того что ввел пользователь, если есть javascript: в начале, то или вырезать, или вывести ошибку пользователю, что так делать нельзя smile.gif

Спустя 7 минут, 56 секунд (3.02.2012 - 16:29) lysosutrin2 написал(а):
Я решил просто прогонять через регулярное выражение)

Спустя 9 минут, 39 секунд (3.02.2012 - 16:39) killer8080 написал(а):
$link = trim($link);
$link = htmlspecialchars( preg_replace('#^(https?://|javascript:.*$)#iu', '', $link) );
$link = $link ? '<a href="http://'.$link.'">'.htmlspecialchars($link_text).'</a>' : 'XSS';

Спустя 53 минуты, 47 секунд (3.02.2012 - 17:32) Белый Тигр написал(а):
На мой взгляд первый совет самый верный) Или так или валидатором каким-нибудь.

Спустя 9 минут, 59 секунд (3.02.2012 - 17:42) killer8080 написал(а):
Цитата (Белый Тигр @ 3.02.2012 - 16:32)
На мой взгляд первый совет самый верный) Или так или валидатором каким-нибудь.

но недостаточный, нужно не только схему проверять. Как вариант обхода защиты
http://site.ru" onmouseover="alert(document.cookie)"

Спустя 12 часов, 2 минуты, 52 секунды (4.02.2012 - 05:45) Белый Тигр написал(а):
Цитата
но недостаточный, нужно не только схему проверять. Как вариант обхода защиты

Хм, не думал что parse_url() может сьесть такую строку. Оказывается может. Тогда лишь валидаторы - filter_var() с флагом FILTER_VALIDATE_URL или что-то готовое, как валидаторы фреймворков.

Спустя 49 минут, 9 секунд (4.02.2012 - 06:34) inpost написал(а):
При выводе преобразовывать в HTML-сущности через htmlspecialchars.
Ничего плохого в том, что кто-то пытался ввести криво - нет, ведь это не уязвимость.

Спустя 1 день, 48 минут, 31 секунда (5.02.2012 - 07:23) Белый Тигр написал(а):
Цитата
При выводе преобразовывать в HTML-сущности через htmlspecialchars.

А какой смысл? Если взять код с eval/fromCharCode и javascript:, то htmlspecialchars() ничего в нём не изменит.
javascript:eval(fromCharCode(...)+fromCharCode(...))


Спустя 3 часа, 33 секунды (5.02.2012 - 10:23) inpost написал(а):
Белый Тигр
Давай поговорим о другом, какой смысл хранить не настоящие ссылки?
Если ссылки на внешние ресурсы, то ссылка должна начинаться с http://, а значит ещё перед тем, как добавляем ссылку, мы проверяем в начале наличие http://, и в случае его отсутствия - дописываем.
И это относится не к безопасности, а к адекватности ссылок типа site.ru, потому что в начале в обязательном порядке необходимо будет дописать http:// .
Мой ответ мне напомнил ответ Киллера выше, посмотрел и точно, мы об одном и том же говорим.

Пункт №1. Создать АДЕКВАТНЫЙ СКРИПТ. Мы выставляем ссылки на сайты, значит site.ru - необходимо преобразовать в адекватный вид: http://site.ru.
Пункт №2. Говорим о безопасности, обработка Кавычек и знаков больше/меньше - тут просто htmlspecialchars.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.