- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这个问题确实出现了:
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/$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>
id
元素的 <p>
包含为防止 XSS 攻击而转义的字符。 HTML 部分和 JS 部分由服务器生成,服务器在这两个部分上插入相同的转义值(可能来自不安全的来源)。
服务器以 &#x
格式转义以下字符范围:
换句话说:唯一不转义的字符是:
.
, /
, 0123456789
)A
– Z
)_
)a
– z
)现在,我必须通过 javascript 访问该 <p>
。引用问题中的函数 echoValue()
总是失败,因为浏览器在 HTML 部分将 $
转换为 $
,但在 JS 部分将其保留为 $
。
我担心的是,当使用引用答案中提供的 decodeEntity()
函数时,通过转义动态字符串消除的 XSS 攻击的可能性将再次出现。
谁能指出是否存在安全问题(哪个?)或不存在(为什么不?)?
最佳答案
我首先建议您查看以下链接,讨论 JavaScript 中的 HTML 卫生和 Javascript 中的 XSS:
安全类(class) 1:不要重新发明轮子。如果以前有人做过某事,他们很可能比您的临时解决方案做得更好。
尽管我无法从头脑中找到一种方法来利用您的简单正则表达式,但我并不相信它真的涵盖了所有情况。第一个链接提供了一个更详细的解决方案,并且已经过全面审查和测试。
我也建议你看看XSS Filter Evasion Cheat Sheet .向您展示人们可能想出什么样的讨厌的东西。
关于javascript - 这段代码容易受到 XSS 攻击吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14521534/
所以我试图让(例如)输入一些值:1 -2 -3 2 5正数的数量是 5 负数的数量是 -3总计为 3 平均值为 0.6我想让它像这样,但是当我运行它时,它不起作用哪一部分是错误的??? import
我编写了一个使用 OpenCV 的 cvCalcOpticalFlowLK 的程序。它在低分辨率网络摄像头输入上表现良好,但我需要在全高清流上运行它,并在对每一帧进行光流分析后进行重要的其他计算。处理
如果我有一个 ruby 脚本 Daemon,顾名思义,它作为守护进程运行,监视系统的各个部分并能够执行需要身份验证的命令,例如更改权限,是否存在一个简单的方法来拥有第二个 ruby 脚本,比如
我们有一个基于 Ant 和 Ivy 的构建管理系统,它基本上由一个共享的 ant 文件和一组围绕目录结构的约定组成。 我试图克服的一个障碍是相当常见的“递归发布”情况。比如说,我们有 5 个内部代码模
我在嵌入式 Linux 环境中遇到了问题。尝试确定它是否可以由应用程序引起。应用程序导致内核崩溃/锁定或终止 init 有多容易? 最佳答案 非根应用程序应该不可能影响任何一个。 以 root 身份运
我目前正在尝试学习 Nim(进展缓慢 - 无法投入太多时间)。另一方面,为了获得一些工作代码,我想对我正在 ruby 中开发的 Nim 应用程序的各个部分进行原型(prototype)设计。 由于
我是一名优秀的程序员,十分优秀!