1

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

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

4

1 回答 1

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 的另一种好方法。

于 2013-08-05T11:50:18.830 回答