【问题标题】:OWASP Application Security Verification Standard - V3 and using with JSFOWASP 应用程序安全验证标准 - V3 并与 JSF 一起使用
【发布时间】:2012-03-08 04:56:35
【问题描述】:

目前我正在处理实施一切是为了防止Top 10 Project的安全风险
对于前 10 名中的第 4 名 - Insecure Direct Object References,OWASP 指的是 OWASP Application Security Verification Standard

所以我正在阅读V3 中的所有内容,但我现在对实现它有一些疑问。
我正在使用 JBoss-AS 7.0.1 和 Java EE6 和 JSF 2.0

V3.4 验证会话 id 除了在 cookie 标头中之外从未公开;特别是在 URL、错误消息或日志中。这包括验证应用程序不支持会话 cookie 的 URL 重写。

我在这里阅读了一些关于 stackoverflow 的文章,如何避免用户第一次访问端时 jesssion 在 URL 中...... 但是很多答案是这样的:使用 URL 重写......这与does not support URL rewriting of session cookies 相比意味着什么

在第一个条目上处理 jsessions 的正常方法是什么?有什么保存方法来处理?

V3.10:验证只有应用程序框架生成的会话 ID 被应用程序识别为有效。

您如何在 JSF2.0/JavaEE 中做到这一点?

V3.12:验证包含经过身份验证的会话令牌/ID 的 cookie 是否将其域和路径设置为该站点的适当限制值。

这是什么意思?当我用 Firebug 查看 cookie 时,我从 URL http://localhost:8080/projectname/ 运行 web 应用程序
在 cookie 中我得到:路径:/projectname
这就是 OWASP 对 have their domain and path set to an appropriately restrictive value for that site. 的含义吗?

谢谢!

【问题讨论】:

    标签: security jsf-2 java-ee-6 jboss7.x owasp


    【解决方案1】:

    V3.4 验证会话 id 除了在 cookie 标头中之外从未公开;特别是在 URL、错误消息或日志中。这包括验证应用程序不支持会话 cookie 的 URL 重写。

    servlet 容器默认配置为支持通过 cookie 和 URL 进行会话跟踪。通过 URL 进行的会话跟踪也称为“URL 重写”,您可以在其中看到 ;jsessionid=[session id] 出现在 URL 中。这将在客户端禁用 cookie 时自动触发。要禁用 URL 跟踪,您需要仅通过 cookie 明确指定跟踪模式。将此添加到 webapp 的 web.xml:

    <session-config>
        <tracking-mode>COOKIE</tracking-mode>
    </session-config>
    

    您还需要确保 JSF 代码无处通过&lt;h:outputText value="#{session.id}" /&gt; 等将会话 ID 打印到 HTML 输出。


    V3.10:验证只有应用程序框架生成的会话 ID 被应用程序识别为有效。

    servlet 容器默认已经这样做了。只有 Tomcat 6.x(本质上也是 JBoss 5.x)存在安全问题,即当启用服务器范围的会话共享时,服务器将完全使用客户端在 Cookie 中提供的会话 ID请求标头。 Tomcat 7.x(以及固有的 JBoss 6.x/7.x)将不再这样做。有关更多背景信息,另请参阅the Tomcat 6.x &lt;Connector&gt; documentation(请查看emptySessionPath 属性说明)。


    V3.12:验证包含经过身份验证的会话令牌/ID 的 cookie 是否将其域和路径设置为该站点的适当限制值。

    servlet 容器默认已经这样做了。仅当您将 servlet 容器配置为使用服务器范围的会话共享(因此,所有部署的应用程序之间共享相同的会话)时,它才违反规则。另见上一点。

    请注意,这些规则中的大多数与 JSF 关系不大。它们更多地与一般服务器和 webapp 配置有关。 JSF 只是一个基于组件的 MVC 框架。

    【讨论】:

    • **再次感谢您的精彩回答... ** V3.4:如果用户在浏览器中禁用了 cookie,是否有回退模式返回到 URL jSession?还是这些用户只是不工作? (会很愚蠢,所以我认为答案必须是肯定的,回退到 URL jSession,对吗?) V3.12:不,我的服务器上只有应用程序 - 所以这应该不是问题,我知道,大多数规则都与 JSF 无关,但我必须了解 JSF 是如何处理这些东西的;)谢谢!
    • 1) 不,将不再有回退。显示用户需要启用 cookie 的警告消息。 2)实际上,服务器上有多少应用程序并不重要。服务器和 webapps 是否单独配置为共享会话很重要。默认情况下不是这种情况。
    • 我现在正在我的 web.xml 中实现它:&lt;session-config&gt;&lt;session-timeout&gt;10&lt;/session-timeout&gt;&lt;cookie-config&gt;&lt;secure&gt;true&lt;/secure&gt;&lt;/cookie-config&gt;&lt;tracking-mode&gt;COOKIE&lt;/tracking-mode&gt;&lt;/session-config&gt; 问题是,现在 jsession 在每个 URL 中,但不在 index.xhtml 中 - 但我认为我现在没有 jsession在网址中? cookie 被激活...(我查看了服务器上的战争,web.xml 就像我发布的那个...
    • 并且:我现在得到 javax.faces.application.ViewExpiredException - 但控制器是 @SessionScoped - 在我更改 web.xml 之前它正在工作
    • 这很奇怪。我现在手头没有 JBoss 7,但它适用于 Tomcat 7.0.23 和 Glassfish 3.1.1。至于视图过期异常,只有在客户端禁用 cookie 时才会发生这种情况。
    猜你喜欢
    • 2018-04-21
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 2022-07-07
    • 2016-06-15
    • 2013-03-05
    • 1970-01-01
    • 2012-12-16
    相关资源
    最近更新 更多