Можно ли записать Javascript в тег html href? - PullRequest
1 голос
/ 19 июня 2010

Я пытаюсь выяснить все способы написания javascript.Я делаю белый список допустимых тегов, но атрибуты меня достают.

В моем богатом html-редакторе я разрешаю такие вещи, как ссылки.

<a href="">Hi </a>

Теперь я использую html agility pack дляизбавиться от атрибутов, которые я не буду поддерживать, и HTML-теги по этому вопросу.

Однако мне все еще неясно, может ли человек сделать что-то подобное

<a href="<script>alert('hi')</script>">Bad </a>

Так что я не уверен, еслиЯ должен начать смотреть на внутренний текст всех атрибутов, которые я поддерживаю, и HTML кодировать их?Или если что.

Я также не уверен, как предотвратить HTML-ссылку, которая переходит на какую-то страницу и запускает некоторый JavaScript при загрузке.

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

Ответы [ 3 ]

5 голосов
/ 19 июня 2010
<a href="javascript:void(0)" onclick="alert('hi');">Bad</a>

или

<a href="javascript:alert('hi');">Bad</a>
3 голосов
/ 19 июня 2010

Если вы пытаетесь написать валидатор XSS для введенного пользователем HTML для производства, я настоятельно рекомендую использовать существующую библиотеку.Даже с подходом белого списка, который вы используете, существует множество возможных значений атрибутов, которые могут привести к XSS.Ищите «javascript:» в Шпаргалке XSS , чтобы увидеть все виды мест, где может появиться javascript: uris.Вот неполный список:

<IMG SRC="javascript:alert('XSS');">
<INPUT TYPE="IMAGE" SRC="javascript:alert('XSS');">
<BODY BACKGROUND="javascript:alert('XSS')">
<IMG LOWSRC="javascript:alert('XSS')">

Существуют также способы введения внешних URL-адресов сценариев, например:

<XSS STYLE="behavior: url(xss.htc);">

Если вы пишете это для собственного образования, тоВ XSS Cheat Sheet есть действительно отличный корм для юнит-тестов.

1 голос
/ 19 июня 2010

вы можете сделать это:

<a href="javascript:(function(){
    alert('hello');
})()">Hello</a>

если хочешь сойти с ума

Edit: Мне нравится это даже лучше

<a onclick="alert(eval({Crazy:function(){alert('Hello');return 'World';}}).Crazy());">
    Crazy
</a>
...