jsp显示警报

时间:2013-08-04 21:01:41

标签: javascript security jsp jsp-tags

如何编写一个打开JSbox的Jsp页面。

适用于此的主要漏洞例如。

1 个答案:

答案 0 :(得分:3)

我只是担心HTML和JS注入引起的跨站点脚本问题。 CSRF似乎还不是一个问题因为只是警告“你好”没有任何你必须登录的活动副作用。

做骨头的方法:

<script type="text/javascript">
    alert('Hello, <%= request.getParameter("name") %>');
</script>

这会导致JS注入,因为JS字符串文字中没有JS转义:

name=');execute_arbitrary_code();'

并且还会受到HTML注入,因为封闭的脚本块可以提前关闭:

name=</script><script>execute_arbitrary_code();//

不幸的是,JSP中没有标准标记可以转义JS字符串文字中的文本(它本身在HTML脚本块中)。您可以编写和使用自己的标记来执行此操作,也可以重用定义一个标记的库。例如,OWASP ESAPI有:

<script type="text/javascript">
    alert('Hello, <esapi:encodeForJavaScript>${param.name}</esapi:encodeForJavaScript>');
</script>

但是通常更容易避免编码到JS中,而是通过DOM推送数据。因为DOM是纯HTML,所以只需要正常的标记转义,JSP本身就在<c:out>标记中。

<input type="hidden" id="name-parameter" value="<c:out value="${param.name}"/>"/>
<script type="text/javascript">
    var name = document.getElementById('name-parameter').value;
    alert('Hello, '+name);
</script>

这有助于保持JS与标记和服务器端代码分离的长期目标。 data-属性是将数据从标记传递到JS的另一种好方法。