1

我正在尝试找出所有可以编写 javascript 的方式。我正在制作可接受标签的白名单,但是这些属性让我很着迷。

在我丰富的 html 编辑器中,我允许链接之类的东西。

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

现在我正在使用 html 敏捷包来摆脱我不支持的属性和 html 标记。

但是我仍然不清楚一个人是否可以做这样的事情

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

所以我不确定我是否必须开始查看我支持的所有属性的内部文本并对它们进行 html 编码?或者如果什么。

我也不确定如何防止进入某个页面并在加载时启动一些 javascript 的 html 链接。

我不确定白名单是否可以阻止该名单。

4

3 回答 3

5
<a href="javascript:void(0)" onclick="alert('hi');">Bad</a>

或者

<a href="javascript:alert('hi');">Bad</a>
于 2010-06-18T23:57:35.843 回答
3

如果您尝试为用户输入的 HTML 编写 XSS 验证器以用于生产,我强烈建议您使用现有的库。即使您采用白名单方法,也有很多很多可能的属性值会导致 XSS。在XSS 备忘单中搜索“javascript:”以查看 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 备忘单为单元测试提供了一些非常好的素材。

于 2010-06-19T00:21:56.967 回答
1

你可以这样做:

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

如果你想变得非常疯狂

编辑: 我更喜欢这个

<a onclick="alert(eval({Crazy:function(){alert('Hello');return 'World';}}).Crazy());">
    Crazy
</a>
于 2010-06-18T23:59:46.103 回答