eck*_*kes 6 html javascript xss
问题确实出现在这个问题上:
为什么浏览器会修改包含的HTML元素的ID?
鉴于以下网页:
<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/$whatever"));
if(e) {
alert(e.innerHTML);
}
else {
alert("not found\n");
}
}
</script>
</head>
<body>
<p id="/path/$whatever">The Value</p>
<button onclick="echoValue()">Tell me</button>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
在id该的<p>元素包含以防止XSS攻击了逃脱字符.HTML部分和JS部分由服务器生成,服务器在两个部分上插入相同的转义值(可能来自不安全的源).
服务器以下列&#x格式转义以下字符范围:
换句话说:唯一没有转义的字符是:
.,)/0123456789A- Z)_)a- z)现在,我必须<p>通过javascript 访问它.echoValue()引用问题中的函数总是失败,因为浏览器在HTML部分中转换$为$但$在JS部分中保留它.
我担心的是,当使用decodeEntity()引用的答案中提供的函数时,通过转义动态字符串消除的XSS攻击的可能性将再次出现.
有人可以指出是否存在安全问题(哪个?)(为什么不呢?)?
我首先建议您查看以下讨论 JavaScript 中的 HTML 卫生和 Javascript 中的 XSS 的链接:
安全教训一: 不要重新发明轮子。如果以前已经做过某些事情,那么他们很可能比您的临时解决方案做得更好。
尽管我无法从内心深处找到一种方法来利用您的简单正则表达式,但我不相信它真的捕获了所有情况。第一个链接提供了一个更详细的解决方案,并且已经过彻底的审查和测试。
我还建议您查看XSS Filter Evasion Cheat Sheet。向你展示人们可能会想出什么样的令人讨厌的东西。
| 归档时间: |
|
| 查看次数: |
1705 次 |
| 最近记录: |