HTML 文本框值属性是否安全免受 XSS 攻击

Are HTML textbox value attributes safe from XSS attacks?

本文关键字:XSS 攻击 安全 是否 文本 属性 HTML      更新时间:2023-09-26

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

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

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

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

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

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

要将此代码正确插入您的网站,您必须了解代码的工作原理。我不确定 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之类的代码。

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

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