javascript - HTML 属性转义

标签 javascript html escaping encode

我正在阅读 OWSAP 预防表,但我对第 2 条规则感到困惑。

RULE #2 - Attribute Escape Before Inserting Untrusted Data into HTML Common Attributes Rule #2 is for putting untrusted data into typical attribute values like width, name, value, etc. This should not be used for complex attributes like href, src, style, or any of the event handlers like onmouseover. It is extremely important that event handler attributes should follow Rule #3 for HTML JavaScript Data Values.

复杂属性不应该被转义的原因是什么,(这不应该用于像 href、src、style 这样的复杂属性),这会产生歧义或破坏属性?

https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet

最佳答案

并不是说它们不应该被转义,而是转义它们不足以使数据免受 XSS 攻击。

<小时/>

转义数据会阻止它脱离属性并启动新的属性或元素。

如果该属性已经可以执行 JavaScript,那么这还不够。

这很容易受到 XSS 攻击:

$external_input = '"><script>alert("got you");</script>';
?><input class="<?php echo $external_input ?>">

但是如果你转义$external_input,那么属性值就变得毫无意义。它没有害处。

另一方面,即使 HTML 被转义,以下内容也允许执行任意脚本。

$external_input = 'alert("got you");';
?><input onmouseover="<?php echo htmlspecialchars($external_input); ?>">
<小时/>

您需要确保数据对于值的任何数据格式都是安全的(然后您仍然应该转义它)。

将值放入 href 属性中?确保它是一个 URL,并且 URL 方案是您信任的方案(例如 http: 而不是 javascript:)。

在脚本中输入值?将其转义为 JS(您通常会使用 JSON 编码器)。

等等。

关于javascript - HTML 属性转义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31526679/

相关文章:

javascript - 将表单输入值传递给另一个 React 组件

javascript - 关于本地与服务器问题的 HTML 页面

php - 转义除标签属性之外的匹配引号

c - C语言中的双引号

javascript - 无法获取表单字段的值

javascript - 使用 css、javascript 和 xhtml 的大型 5000 单元格网格

javascript - 如何在同一页面上异步显示表单发布数据(不刷新页面)?

javascript - 在 React 中,为什么从我们的代码中的另一个函数调用一个函数不起作用并显示?

csv - Azure ML : How to save and process CSV files with semicolon as delimiter?

javascript - 在 Jade 中迭代循环时重复