CSRF& XSS无法使用HDIV

时间:2015-01-02 08:42:31

标签: security xss csrf owasp hdiv

我在我的项目中使用HDIV来保护OWASP列表,但是文本框正在接受<script>alert(1);</script>作为输入并保存到db。

我想为所有OWASP问题编写测试用例。

以下是项目配置

web.xml 配置

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>               
        WEB-INF/spring/applicationContext-db.xml
        WEB-INF/spring/spring-security.xml
        WEB-INF/spring/hdiv-config.xml
    </param-value>
</context-param>

webmvc-config.xml 配置

<import resource="applicationContext-hdiv.xml" />

applicationContext-hdiv.xml 配置

<beans>
    <bean id="requestDataValueProcessor" class="org.springframework.security.web.servlet.support.csrf.CsrfRequestDataValueProcessor" />


<bean id="editableValidator" class="org.hdiv.web.validator.EditableParameterValidator"/>
    <mvc:annotation-driven validator="editableValidator" />
</beans>

hdiv-config.xml 配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:hdiv="http://www.hdiv.org/schema/hdiv" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
               http://www.hdiv.org/schema/hdiv http://www.hdiv.org/schema/hdiv/hdiv.xsd">

            <hdiv:config excludedExtensions="css,js,ttf" errorPage="/manage/security-error" maxPagesPerSession="10" confidentiality="true" strategy="memory" randomName="true"> 
                <hdiv:sessionExpired loginPage="/main/common" homePage="/"/>
                <hdiv:startPages method="get">/,/.*,/manage/.*,/login</hdiv:startPages>
            </hdiv:config>

            <hdiv:validation id="customValidation" componentType="text">
                <hdiv:acceptedPattern><![CDATA[^[a-zA-Z0-9@.\-_]*$]]></hdiv:acceptedPattern>
                <hdiv:rejectedPattern><![CDATA[(\s|\S)*(--)(\s|\S)*]]></hdiv:rejectedPattern>
            </hdiv:validation>

            <hdiv:editableValidations registerDefaults="true">
                <hdiv:validationRule url=".*" enableDefaults="false">customValidation</hdiv:validationRule>
            </hdiv:editableValidations>         
        </beans> 

2 个答案:

答案 0 :(得分:2)

XSS是输出问题,而不是输入问题。输入验证是根据域确保数据正确。因此,例如,您要检查期望需要一年的字段实际上是否在预期范围内收到一个数字。您可能还需要确保只允许使用允许的字符。在许多情况下,这将阻止许多攻击。

然而,对于复杂的输入,这已不再可行。考虑一个允许用户注释的文本字段。应该允许用户写出诸如“因此x <4”的评论。现在我们允许使用用于构建html标签的字符。

现在我们有两个选择:

  1. 使用工具删除危险的HTML - 可能在某些时候失败
  2. 使用上下文感知转义,如OWASP XSS预防备忘单
  3. 中所述

答案 1 :(得分:0)

删除&#39; requestDataValueProcessor&#39;和&#39; editableValidator&#39;来自&#39; applicationContext-hdiv.xml&#39;的bean文件,它们由标签自动创建。

查看此项目配置以获取一个工作示例: https://github.com/hdiv/hdiv-spring-mvc-showcase