UNl*_*nel 2 html javascript xss
我正在评论网站的客户端工作。
用户可以在评论描述中插入任何文本,包括 html 元素文本(如 : <script> console.log('hello') </script>),并使用基本文本样式对其进行样式设置:斜体、粗体等...
我想测试跨站点脚本。所以我玩了一下,当使用斜体时,元素被渲染为 html 元素的内部文本。
HTML 中的 insideText 如下所示:
不过,我没有看到警报被执行。
用户能否编写通过事件调用而成为有效 HTML 的文本?如果是这样,怎么办?
您在 elements/DOM 选项卡中看到的内容有点误导您。如果您已经使用innerText(或者更恰当地说textContent,通常)设置元素的文本,则它中没有标签。它有人物。从显示的角度来看,这些字符可以形成标签,但它们不是标签,浏览器不会那样对待它们。
查看此内容的一种方法是查看它们的 HTML:
\nconst target = document.getElementById("target");\ntarget.textContent =\n `<script>alert("Hi!");<\\/script>\n <div onclick=\'alert("Ho!");\'>click me</div>\n <img onerror=\'alert("Hum!");\' src=\'\'>`;\nconsole.log("textContent:", target.textContent);\nconsole.log("innerHTML:", target.innerHTML);Run Code Online (Sandbox Code Playgroud)\r\n<div id="target"></div>Run Code Online (Sandbox Code Playgroud)\r\n请注意,该元素不包含标签script,它包含字符<, s, c, r, i, p,t等。
相反,使用innerHTML会让你很容易受到 XSS 攻击:
const target = document.getElementById("target");\ntarget.innerHTML =\n `<script>alert("Hi!");<\\/script>\n <div onclick=\'alert("Ho!");\'>click me</div>\n <img onerror=\'alert("Hum!");\' src=\'\'>`;\nconsole.log("textContent:", target.textContent);\nconsole.log("innerHTML:", target.innerHTML);Run Code Online (Sandbox Code Playgroud)\r\n<div id="target"></div>Run Code Online (Sandbox Code Playgroud)\r\nscript以这种方式插入的标签不会运行,但属性定义的事件处理程序会运行,例如没有\xc2\xa0\xe2\x80\x94error的事件,并且运行的代码可以添加一个会得到执行:imgsrcscript
const target = document.getElementById("target");\ntarget.innerHTML =\n `<div onclick=\'alert("Ho!");\'>click me</div>\n <img onerror=\'(function() {\n alert("Hi!");\n var s = document.createElement("script");\n s.textContent = 'alert("Hi from script");';\n document.body.appendChild(s);\n })()\' src=\'\'>`;\nconsole.log("textContent:", target.textContent);\nconsole.log("innerHTML:", target.innerHTML);Run Code Online (Sandbox Code Playgroud)\r\n<div id="target"></div>Run Code Online (Sandbox Code Playgroud)\r\n| 归档时间: |
|
| 查看次数: |
2090 次 |
| 最近记录: |