HTML文本框值属性是否可以免受XSS攻击?

时间:2013-10-28 14:00:46

标签: javascript html asp.net xss

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

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

无论如何,我试图插入像< script>alert('hi') < /script>这样的东西,但是当设置Text属性时我无法执行此脚本(在客户端HTML中转换为value属性结果如下:

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

那么,value属性是否可以免于注入?

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

2 个答案:

答案 0 :(得分:7)

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

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

如果您使用以下网址将参数传回表单:

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等代码。

答案 1 :(得分:4)

内置文本框控件自动对文本属性进行编码。检查输出时,是否使用了视图源或开发人员控制台。控制台将未转义的数据显示为未转义,而查看源将显示实际输出。

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