如何编写一个打开JSbox的Jsp页面。
适用于此的主要漏洞例如。
答案 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的另一种好方法。