gpt4 book ai didi

javascript - 这段代码容易受到 XSS 攻击吗?

转载 作者:太空狗 更新时间:2023-10-29 15:08:48 28 4
gpt4 key购买 nike

这个问题确实出现了:
Why does the browser modify the ID of an HTML element that contains &#x?

给定以下网页:

<html>
<head>
<script type="text/javascript">
// --------------------------------------------------------
// could calling this method produce an XSS attack?
// --------------------------------------------------------
function decodeEntity(text){
text = text.replace(/<(.*?)>/g,''); // strip out all HTML tags, to prevent possible XSS
var div = document.createElement('div');
div.innerHTML = text;
return div.textContent?div.textContent:div.innerText;
}
function echoValue(){
var e = document.getElementById(decodeEntity("/path/&#x24;whatever"));
if(e) {
alert(e.innerHTML);
}
else {
alert("not found\n");
}
}
</script>
</head>
<body>
<p id="/path/&#x24;whatever">The Value</p>
<button onclick="echoValue()">Tell me</button>
</body>
</html>

id 元素的 <p> 包含为防止 XSS 攻击而转义的字符。 HTML 部分和 JS 部分由服务器生成,服务器在这两个部分上插入相同的转义值(可能来自不安全的来源)。

服务器以 &#x 格式转义以下字符范围:

  • 0x00 – 0x2D
  • 0x3A – 0x40
  • 0x5B – 0x5E
  • 0x60
  • 0x7B – 0xFF
  • 0x0100 – 0xFFFF

换句话说:唯一转义的字符是:

  • 0x2E – 0x39 (., /, 0123456789)
  • 0x41 – 0x5A (AZ)
  • 0x5F (_)
  • 0x61 – 0x7A (az)

现在,我必须通过 javascript 访问该 <p>。引用问题中的函数 echoValue() 总是失败,因为浏览器在 HTML 部分将 &#x24; 转换为 $,但在 JS 部分将其保留为 &#x24;

因此,Gareth 想出了简单有效的 an answer

我担心的是,当使用引用答案中提供的 decodeEntity() 函数时,通过转义动态字符串消除的 XSS 攻击的可能性将再次出现。

谁能指出是否存在安全问题(哪个?)或不存在(为什么不?)?

最佳答案

我首先建议您查看以下链接,讨论 JavaScript 中的 HTML 卫生和 Javascript 中的 XSS:

安全类(class) 1:不要重新发明轮子。如果以前有人做过某事,他们很可能比您的临时解决方案做得更好。

尽管我无法从头脑中找到一种方法来利用您的简单正则表达式,但我并不相信它真的涵盖了所有情况。第一个链接提供了一个更详细的解决方案,并且已经过全面审查和测试。

我也建议你看看XSS Filter Evasion Cheat Sheet .向您展示人们可能想出什么样的讨厌的东西。

关于javascript - 这段代码容易受到 XSS 攻击吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14521534/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com