我试图弄清楚javascript的所有编写方式。我正在制作一个可接受标签的白名单,但属性正在让我。
在我的富html编辑器中,我允许链接等内容。
<a href="">Hi </a>
现在我正在使用html agility pack来摆脱我不支持的属性和html标签。
但是我还不清楚一个人是否可以做这样的事情
<a href="<script>alert('hi')</script>">Bad </a>
所以我不确定是否必须开始查看我支持的所有属性的内部文本并对其进行html编码?或者如果是什么。
我也不确定如何阻止某个页面的html链接并在加载时启动一些javascript。
我不确定白名单是否可以阻止该名单。
答案 0 :(得分:5)
<a href="javascript:void(0)" onclick="alert('hi');">Bad</a>
或
<a href="javascript:alert('hi');">Bad</a>
答案 1 :(得分:3)
如果您正在尝试为用户输入的HTML编写XSS验证器以进行生产,我强烈建议您使用现有的库。即使使用白名单方法,也有许多可能导致XSS的属性值。在XSS Cheat Sheet中搜索“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')">
还有一些方法可以注入外部脚本网址,例如:
<XSS STYLE="behavior: url(xss.htc);">
如果您正在为自己的教育写这篇文章,那么XSS备忘单对于单元测试有一些非常好的素材。
答案 2 :(得分:1)
你可以这样做:
<a href="javascript:(function(){
alert('hello');
})()">Hello</a>
如果你想变得非常疯狂
修改: 我更喜欢这个
<a onclick="alert(eval({Crazy:function(){alert('Hello');return 'World';}}).Crazy());">
Crazy
</a>