正在尝试通过文本框插入脚本

本文关键字:文本 插入 脚本 | 更新日期: 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> ").

然后我尝试了这个:&ltscript&gt$(window).load(function(){alert('hello');});&lt/script&gt,它以同样的方式插入到数据库中,但在页面上呈现为<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编码(这是一种很好的做法)。