【问题标题】:jsp to display alertjsp 显示警报
【发布时间】:2013-08-04 21:01:41
【问题描述】:

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

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

【问题讨论】:

    标签: javascript security jsp jsp-tags


    【解决方案1】:

    我只是担心 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 在 &lt;c:out&gt; 标记中自带。

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

    【讨论】:

      猜你喜欢
      • 2021-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-22
      • 2011-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多