0

OWASP リストから保護するためにプロジェクトで HDIV を使用していますが、テキスト ボックスは<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> 
4

2 に答える 2

2

XSS は出力の問題であり、入力の問題ではありません。入力の検証とは、ドメインに従ってデータが正しいことを確認することです。たとえば、1 年かかると予想されるフィールドが実際に予想される範囲内の数値を受け取ることを確認したいとします。許可された文字のみが使用されていることを確認することもできます。多くの場合、これにより多くの攻撃が阻止されます。

ただし、複雑な入力の場合、これは実行できなくなります。ユーザーがコメントできるようにするテキスト フィールドを考えてみましょう。ユーザーは、「したがって x < 4」などのコメントを書き込むことができるようにする必要があります。これで、html タグの作成に文字を使用できるようになりました。

ここで、2 つのオプションがあります。

  1. ツールを使用して危険な HTML を取り除きます - ある時点で失敗する可能性があります
  2. OWASP XSS 防止チート シートで説明されているように、コンテキスト アウェア エスケープを使用します。
于 2015-01-03T09:17:38.000 に答える
0

'applicationContext-hdiv.xml' ファイルから 'requestDataValueProcessor' および 'editableValidator' Bean を削除します。これらはタグによって自動的に作成されます。

実際の例については、このプロジェクト構成をご覧ください: https://github.com/hdiv/hdiv-spring-mvc-showcase

于 2015-01-05T11:03:16.037 に答える