emi*_*lly 5 java browser security xss web-applications
我的UI中有一个HTML textarea(用于基于Java的Web应用程序),用户可以在其中输入任何值.保存后,它将显示在浏览器中的textarea(已禁用)中.
如果用户在textarea中输入任何脚本作为自由文本,它是否会作为脚本执行(即使值显示在textarea中,而不是作为标签/文本显示)?
这取决于您如何设置textarea. 在 HTML 代码中, 的内容textarea是元素内部的文本。
我创建了一个JSFiddle 来演示更改内容的各种方法textarea
<div><textarea id="e1"></textarea></div>
<div><textarea id="e2"></textarea></div>
<div id="e3"/>
var dangerous = '<scri' + 'pt>alert("Danger!");</scri' + 'pt>';
document.getElementById('e1').value = dangerous;
document.getElementById('e2').innerHTML = dangerous;
dangerous = '</textarea>' + dangerous;
var content = '<textarea>' + dangerous + '</textarea>';
document.getElementById('e3').innerHTML = content;
console.log('Done.');
Run Code Online (Sandbox Code Playgroud)
这将创建两个textarea元素,其中包含一个脚本(保存)和一个空的。
在最后一个测试中,我关闭textarea输入中的 ,然后附加脚本。有趣的是,设置innerHTML在这种情况下使用是安全的:它不会执行以这种方式插入的脚本。
所以只要你用 JavaScript 来做,你就很安全。但通常,您在服务器上呈现页面的 DOM,然后您必须确保正确转义 DOM 的内容,textarea因为:
String unfilteredInput = "</textarea><script>alert(\"Danger!\");</script>";
out.write("<textarea>");
out.write(content);
out.write("</textarea>");
Run Code Online (Sandbox Code Playgroud)
将执行脚本。
注意:我也试图演示,document.write()但这在 JSFiddle 中是不允许的。我很确定这document.write()很容易受到同样的攻击。
| 归档时间: |
|
| 查看次数: |
2839 次 |
| 最近记录: |