正在尝试通过文本框插入脚本
本文关键字:文本 插入 脚本 | 更新日期: 2023-09-27 17:57:32
我创建了一个ASP.NET(fw 3.5)网站,希望检查它是否存在漏洞。
我接受来自文本框的输入并将其保存在数据库中,然后稍后在另一个页面上动态显示。
如果我尝试输入<script>...</script>
,或者任何带有<
和>
的内容,我的global.asax会捕捉到异常,并得到消息A potentially dangerous Request.Form value was detected from the client (TextBox1="<b>
asd</b>
").
然后我尝试了这个:<script>$(window).load(function(){alert('hello');});</script>
,它以同样的方式插入到数据库中,但在页面上呈现为<script>$(window).load(function(){alert('hello');});</script>
。
然而,我没有收到警报框。脚本按原样打印在页面上。呈现的HTML是:
<td style="font-size: 16px;" colspan="2"><script>$(window).load(function(){alert('hello');});</script></td>
我的问题是,为什么这个脚本没有执行?我的意思是,这是一件很棒的事情,因为我读到了关于跨端脚本攻击的文章,并希望使我的网站安全,这就是它现在的表现,但我不明白为什么不是这样,因为我真的没有编写任何代码来阻止这种攻击。
提前谢谢。
ASP.NET Webforms默认情况下启用了请求验证,这就是为什么会出现异常的原因。当您输入它以避免请求验证时,它会被解释为html实体,而不会被解释为javascript。
换句话说,html实体是转义html标记的一种方式,这样您就可以呈现html保留字符,而不会将它们解释为html。(类似于换行符的"''n"等)
默认情况下,许多WebForms控件会自动对其文本值进行Html编码,这也可以防止xs,但如果禁用"请求验证",则必须确保数据库中的数据在输出到浏览器之前经过Html编码(这是一种很好的做法)。