为什么 XSS 注入需要对 & 进行转义

2024-04-30

OWASP 建议转义以防止 XSS 注入的五个字符是&, <, >, ", '.

其中,我无法理解为什么&(&符号)应该被转义以及如何将其用作注入脚本的向量。有人可以举个例子,所有其他四个字符都被转义,但与号没有转义,所以会有 XSS 注入漏洞。

我已经检查了另一个问题,但这个答案确实没有让事情变得更清楚。


答案here https://stackoverflow.com/questions/9124134/cross-site-scripting-xss-do-i-need-to-escape-the-ampersand仅在 HTML 属性上下文中的嵌套 JavaScript 上下文中解决该问题,而您的问题专门询问纯 HTML 上下文转义。

在这个问题中,转义应该按照JavaScript 的 OWASP 推荐 https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet#Output_Encoding_Rules_Summary:

除字母数字字符外,请使用 \uXXXX unicode 转义格式(X = 整数)对所有字符进行转义。

哪个已经处理了&因为它不是字母数字。

为了回答你的问题, 从实际的角度来看,为什么你不会吗转义 & 符号?

HTML 表示形式为& is &amp;,所以这样做很有意义。如果您没有这样做,则每当用户输入&amp, &lt, or &gt到您的应用程序中,您的应用程序将呈现&, <, or >代替&amp, &lt or &gt.

边缘情况?确实。安全问题?不应该的。

来自HTML5 语法 字符参考部分 https://www.w3.org/TR/html5/syntax.html#character-references:

字符引用必须以 U+0026 与字符 (&) 开头。 接下来,有三种可能的角色 参考:

  • 命名角色参考
  • 十进制数字字符参考
  • 十六进制数字字符参考

When an &遇到:

切换到数据状态。

尝试使用字符引用,不允许额外使用 特点。

如果未返回任何内容,则发出 U+0026 与字符 (&) 标记。

否则,发出返回的字符标记。

因此,之后的任何事情&会导致&要输出或表示的字符。由于以下字符必须是字母数字,否则它们将不会被使用,因此不可能出现转义字符(例如', ", >, <)被消耗和忽略,因此攻击者改变解析上下文的安全风险很小。然而,你永远不知道是否存在不完全遵循标准的浏览器错误,因此我总是会逃避&。 Internet Explorer 有一个问题,您可以指定<%它会被解释为<允许绕过 .NET 请求验证以进行 XSS 攻击。安全总比后悔好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 XSS 注入需要对 & 进行转义 的相关文章

  • 如何安全地使用 fckEditor,而不存在跨站脚本风险?

    此链接描述了使用 fckEditor 对我的应用程序的利用 http knitinr blogspot com 2008 07 script exploit via fckeditor html http knitinr blogspot
  • 未捕获的安全错误:阻止了具有原点的框架...访问具有原点的框架

    我已经为 SAP 解决方案 无论什么 制作了一个组件 该组件通过 iframe 嵌入到报告中 在 SAP 平台 BO 上部署报告后 我收到此错误 在 Chrome 上 但在 IE 或 FF 上也不起作用 Uncaught SecurityE
  • 如何在 C# 中创建 PKCS12 .p12 文件?

    这可能是一个n00b问题 但我在这方面确实没有任何经验 我需要创建一个包含 X509 证书和私钥的 p12 捆绑包 我当前有两个对象 X509Certificate2 和包含关键信息的 RSAParameters 对象 如何将它们合并到 p
  • Escape String - 在 Javascript 中输出rails字符串[重复]

    这个问题在这里已经有答案了 我正在尝试将字符串值分配给 erb 文件中的 javascript 对象 如下所示 var data name 问题是 如果name is Tom s small ears 的输出data name将会Tom x
  • php字符串是值类型吗?

    为什么php的string是值类型 每次将参数传递给函数时 每次进行赋值时 每次连接都会导致字符串被复制时 它都会被复制到各处 我的 NET 经验告诉我 它似乎效率低下 迫使我几乎在任何地方都使用引用 考虑以下替代方案 替代方案1 This
  • 解码 OAEP 填充时出错

    我的问题已经解决了一半 请帮助 我已使用数字签名的公钥成功加密了文本 但在解密时出现错误 解码 OAEP 填充时出错 我的代码如下 region Test Encryption public void a using var rsa new
  • 用于防止滥用的 Servlet 过滤器? (DoS、垃圾邮件等)

    我正在寻找一个 Servlet 过滤器库 它可以帮助我保护我们的 Web 服务免受未经授权的使用和 DDoS 攻击 我们的网络服务有 授权客户 因此理想情况下 过滤器将帮助检测未经授权或行为不当的客户 或检测使用同一帐户的多个人 此外 我们
  • ActiveMQ发送ObjectMessage

    我正在使用 ActiveMQ 在我当前的项目中实现消息系统 我需要发送和接收 Java 对象 而不是简单的文本或二进制消息 Java 对象 我的消息对象 根据需要实现了 Serialized 接口 ActiveMQ 的最新版本添加了一些安全
  • 防止语言环境文件中的 HTML 字符实体被 Rails3 xss 保护破坏

    我们正在构建一个应用程序 这是我们第一个使用 Rails 3 的应用程序 并且我们必须从一开始就构建 I18n 作为完美主义者 我们希望在我们的视图中使用真正的排版 破折号 卷曲引号 省略号等 这意味着在我们的 locales xx yml
  • 使用 CSP 防止自动点击链接 XSS 攻击

    当将 CSP 用于稍微不同的目的 沙箱 时 我意识到一个非常简单的自动点击链接似乎甚至可以绕过相对严格的 CSP 我所描述的内容如下 内容安全政策 default src none script src unsafe inline 还有身体
  • 什么是 API 密钥? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如今 我几乎在每个跨服务应用程序中都看到这个词 API 密钥到底是什么以及它的用途是什么 另外 公共 API 密钥和私有 API 密钥
  • Keystore getEntry 在 Android 9 上返回 NULL

    c我已对存储在 Android 密钥库中的登录密码进行了加密和解密 在 Android 9 上 我观察到应用程序在尝试解密密码时崩溃 我无法重现它 但拥有 Pixel 3 的用户是崩溃的设备之一 下面是我如何从密钥库解密密码 private
  • C 支持原始字符串吗?

    C 11 添加了对原始字符串文字的支持 例如 R foo A weird string foo C有这样的东西吗 如果有 标准是什么版本 C11 如果没有 有谁知道它是否正在计划中以及是否有编译器支持它 C有这样的东西吗 如果有 标准是什么
  • PHP - hash_pbkdf2 函数

    我正在尝试使用此 php 函数执行一个函数来哈希密码 http be php net manual en function hash pbkdf2 php http be php net manual en function hash pb
  • 如何使用 std::string 将所有出现的一个字符替换为两个字符?

    有没有一种简单的方法来替换所有出现的 in a std string with 转义 a 中的所有斜杠std string 完成此操作的最简单方法可能是boost字符串算法库 http www boost org doc libs 1 46
  • 保护 ASP.NET 网站中 Elmah RSS 源的安全

    我遵循了这个问题的答案在 ASP NET 网站中保护 Elmah 的安全 https stackoverflow com questions 1245364 securing elmah in asp net website限制对 elma
  • 检查字符串是否是哈希值

    我正在使用 SHA 512 来散列我的密码 当然还有盐 我认为我想要的不可能 但无论如何我们还是要问一下 有没有办法检查字符串是否已经是 SHA 512 或其他算法 哈希值 当用户登录时 我想检查他的密码 如果它仍然是纯文本 则应将其转换为
  • 我可以在 PHP 会话变量中安全地存储用户名和密码吗?

    我想在 REST api 之上制作一个轻量级的 web 应用程序 用户只需进行一次身份验证 从那时起 所有针对 web api 的请求都希望通过以某种方式保持用户名和密码有效来完成 我已经做了一个工作原型我在哪里将用户名和密码存储在会话变量
  • SSLHandshakeException:证书中的主机名不匹配

    我正在编写一个系统 必须向具有自签名证书的服务器 一个名为 ARX 的第三方程序 当前在开发过程中在本地主机上运行 进行多部分发布 我试图找到它的证书 但只能找到三个不同的jks文件 服务器 jks 服务器信任 jks and 服务器ca
  • SSL 速度:128 位与 256 位

    我决定使用 SSL 加密我的整个网站 即使实际上只有部分网站是必要的 最终结果是该网站现在有点慢 所以 我的问题是 我是否应该只加密网站的会员部分 请记住我在首页上有登录表单 我是否应该将加密降低到 128 位 如果站点总体较小 速度差异是

随机推荐

  • 自定义半透明 Android ActionBar

    我一直在互联网上搜索 例如 Android 文档 此处的答案等 以寻找我认为相当琐碎的问题的答案 如何实现像中那样的半透明操作栏谷歌音乐 http coreylatislaw com wp content uploads 2011 07 g
  • JPA如何为@OneToMany关系的列添加唯一约束,例如用户名

    我有一个班级Site代表一个网站和一个类User A Site可以有多个Users class Site private int site ID OneToMany with a join table private List
  • 使用 STUN 打孔

    我目前正在尝试通过 Internet 发送 UDP 消息 并且必须为端点 A 和 B 都位于 NAT 后面 设置防火墙 为此 我想使用 STUN 服务器进行打孔 当 A 创建对 STUN 服务器的请求 例如 私有 85 1 1 12 600
  • 按预定义顺序进行 XSLT 节点转换

    如何使转换遵循 xml 节点顺序 xml文件是这样的
  • Objective C 视图到控制器通信

    在视图中接受用户输入然后将其传输到该视图的控制器的正确方法是什么 我知道通知中心是一种选择 但肯定有一种更优雅的方式将数据从视图传输到其控制器吗 非常感谢所有帮助 我总是接受答案 使用委托协议设计模式 或通过子类化目标操作UIControl
  • 通过ant编译jdk

    我想编译jdk文件以包含调试信息 我想使用 ant 因为它包含在我的 NetBeans 环境中 所以我做了以下操作 将 src zip 解压到 tmp 目录中 在我的 tmp 目录中创建了一个非常简单的 build xml 文件 一个默认目
  • 在数组中添加/删除元素时收到通知

    我想在从数组中添加 删除元素时收到通知 如果我们不是在谈论数组 例如要在字符串更改时收到通知 则 swift 中有一个很好的解决方案 private var privateWord String var word String get re
  • 在 emacs 主要模式下正确突出显示

    我正在为一种语言开发 emacs 主要模式 又名mydsl 然而 由于某种原因 使用 xahlee 网站上的技术似乎不起作用 可能是较旧的 emacs 方言 我正在解决的关键问题是 1 突出显示评论不起作用以及 2 使用regexp opt
  • IN 语句中的数据上下文 ExecuteCommand 参数

    运行自定义的最佳方式是什么sql声明使用IN从 C LinQ 到 sql 数据上下文 我努力了 db ExecuteCommand UPDATE tblCard SET used 1 WHERE id IN 0 AND customer i
  • 无法初始化类 com.sun.xml.internal.ws.api.BindingID

    使用 jax ws 创建 Web 服务客户端项目 出现以下错误 使用 Netbeans 7 2 JSK 1 6 Apache Tomcat 7 创建项目 错误是什么 缺少一些 jar 文件 java lang NoClassDefFound
  • 在同一个应用程序上创建多个 PouchDB 数据库是否被认为是糟糕的设计?

    我有 Mysql 背景 现在使用 Pouchdb 我习惯了每个应用程序有 1 个数据库和许多表的 SQL 模式 在 pouchDB 中情况有所不同 因为数据不是存储在表中而是存储在文档中 因此 在我的应用程序中 我有一个任务数据库 使用以下
  • 如何将 int 数组添加到共享首选项中?

    我正在尝试将 int 数组保存到共享首选项中 int myInts 1 2 3 4 SharedPreferences prefs getSharedPreferences Settings 0 SharedPreferences Edit
  • 如果在SAX中设置setNamespaceAware(true),如何获取“xmlns:XXX”属性?

    这是我的代码 path wsdlPath SAXParserFactory saxfac SAXParserFactory newInstance saxfac setNamespaceAware true saxfac setXInclu
  • 如何操作 Rust 数组的 2 个可变切片?

    我有一个函数需要对单个数组的两个部分进行操作 目的是能够建立一个 nostd 分配器 可以将更大数组的变量切片返回给调用者 并保留数组的其余部分以供将来分配 这是失败的示例代码 fn split lt a gt mut item a mut
  • 以编程方式编辑 PDF 文件

    目前我已经编写了一个Android应用程序 可以使用Android中的默认PDF查看器打开PDF文件并通过邮件发送 android 中有什么方法可以通过我的应用程序编辑 PDF 吗 None
  • 无法在 HTML 中的单选按钮之间进行选择?

    我有以下表单代码 但无法在 IE 中选择销售无线电 我可以在 Google Chrome 中同时选择两个收音机
  • 如何从 httpservletrequest 获取多方身份

    我正在尝试从 java spring 控制器调用 web 服务 下面是代码 private void storeImages MultipartHttpServletRequest multipartRequest DefaultHttpC
  • 更新 Heroku CLI 时出错:存在写锁:更新

    然而 我正在尝试更新 Heroku CLI 但没有成功 Heroku CLI 的当前版本是 heroku cli 6 15 5 1f03166 win32 x64 node v9 3 0 跑步时 heroku update 我收到以下错误
  • 如何使用 Chart.js 在标签中放置新行?

    我有一个使用 Chart js 的带有标签的数据集 我想用换行符将标签分成两行 我努力了 br and n 两者都不起作用 labels A br Waking B C D labels A nWaking B C D 第一个标签应该输出如
  • 为什么 XSS 注入需要对 & 进行转义

    OWASP 建议转义以防止 XSS 注入的五个字符是 lt gt 其中 我无法理解为什么 符号 应该被转义以及如何将其用作注入脚本的向量 有人可以举个例子 所有其他四个字符都被转义 但与号没有转义 所以会有 XSS 注入漏洞 我已经检查了另