有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

当脚本显示在HTML文本区域中时,java是否可能进行XSS攻击?

我的UI中有一个HTML文本区(用于基于Java的web应用),用户可以在其中输入任何值。保存后,它将显示在浏览器的文本区域(已禁用)

如果用户在textarea中以自由文本的形式输入任何脚本,它是否会作为脚本执行(即使该值显示在textarea中,而不是以标签/文本的形式显示)


共 (1) 个答案

  1. # 1 楼答案

    这取决于如何设置textarea的值。在HTML代码中,textarea的内容是元素中的文本

    我创建了一个JSFiddle to demonstrate以各种方式更改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.');
    

    这将创建两个textarea元素,其中一个是脚本(save),另一个是空的

    在上一个测试中,我关闭输入中的textarea,然后附加脚本。 有趣的是,在本例中设置innerHTML是安全的:It doesn't execute scripts inserted in this way

    所以,只要你使用JavaScript,你就相当安全。但通常,在服务器上呈现页面的DOM,然后必须确保正确转义textarea的内容,因为:

    String unfilteredInput = "</textarea><script>alert(\"Danger!\");</script>";
    
    out.write("<textarea>");
    out.write(content);
    out.write("</textarea>");
    

    将执行脚本

    注意:我还试图演示document.write(),但这在JSFIDLE中是不允许的。我很确定document.write()很容易受到同样的攻击