我有一个文本框,我想让用户能够键入潜在危险的字符,例如<
和>
(这是一个数学表达式数据输入字段,需要我禁用ASP。文本框上的NET验证)。数据存储在数据库中,稍后检索以显示在页面上。当我在文本框中显示数据时,我将其设置如下:
textboxA.Text = expression;
其中expression
来自具有潜在危险字符的数据库。
无论如何,我试图插入像< script>alert('hi') < /script>
这样的东西,但是当设置Text
属性时我无法执行此脚本(在客户端HTML中转换为value
属性结果如下:
< input type="text" value="<script>alert('hi')< /script>">>< /input>
那么,value
属性是否可以免于注入?
注意:示例中每个标记之前的空格仅适用于StackOverflow,因为它会从问题中删除标记。
答案 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)