【发布时间】:2013-08-04 21:01:41
【问题描述】:
我如何编写一个打开 JSbox 的 Jsp 页面。
适用于此的主要漏洞,例如。
【问题讨论】:
标签: javascript security jsp jsp-tags
我如何编写一个打开 JSbox 的 Jsp 页面。
适用于此的主要漏洞,例如。
【问题讨论】:
标签: javascript security jsp jsp-tags
我只是担心 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 的另一种好方法。
【讨论】: