4

我有一个文本框,我希望用户能够在其中输入具有潜在危险的字符,例如<>(这是一个数学表达式数据输入字段,需要我禁用文本框上的 ASP.NET 验证)。数据存储在数据库中,稍后检索以显示在页面上。当我在文本框中显示数据时,我将其设置为:

textboxA.Text = expression;whereexpression来自具有潜在危险字符的数据库。

无论如何,我尝试故意插入类似< script>alert('hi') < /script>但我无法在Text设置属性时执行此脚本(转换为value客户端 HTML 中的属性。结果如下所示:

< input type="text" value="<script>alert('hi')< /script>">>< /input>

那么是什么给出的,该value属性对注射安全吗?

注意:示例中每个标签前的空格仅适用于 StackOverflow,因为它会从问题中删除标签。

4

2 回答 2

7

要将此代码正确插入您的站点,您必须了解代码的工作原理。我不确定 ASP.net 如何声明输入字段,但只要它不会自动编码特殊字符,那么我的提示应该让您插入代码。

例如,如果这是您的输入代码的样子(这是 HTML 站点的输入字段),<?php if (isset($_SESSION['username'])) {echo $_SESSION['username'];} ?>它将脚本插入回 HTML 页面的代码部分在哪里(假设您将值保存到会话中并重新显示值文本框)

如果您使用 URL 将参数传递回表单:

http://www.website.com/index.php?username="><script>alert('hi')</script>

<input type="text" name="username" 
value="<?php if (isset($_SESSION['username'])) {echo $_SESSION['username'];} ?>">

那么你要注入的代码必须是这样的:

"><script>alert('hi')</script>

注意">这段代码的开头。基本上它的作用是value=""使用"标签结束,然后用 . 关闭输入字段>

所以实际的结果是:

<input type="text" name="username" value=""><script>alert('hi')</script>

从那里您将能够插入诸如 JavaScript 之类的代码。

于 2013-11-29T09:38:07.630 回答
4

内置文本框控件自动对文本属性进行编码。当您检查输出时,您使用的是查看源代码还是开发者控制台。控制台将转义数据显示为未转义,而查看源将显示实际输出。

无论如何,对文本框值属性的经典攻击是: " autofocus onfocus="alert(1)

于 2013-10-29T07:21:59.997 回答