2

私は ESAPIm の初心者で、何日も答えを探していました。次のエラーが発生しました。

Attempting to load ESAPI.properties via file I/O.
Attempting to load ESAPI.properties as resource file via file I/O.
Not found in 'org.owasp.esapi.resources' directory or file not readable: C:\Documents and Settings\Administrator\Desktop\TEM - Workspace\testSecurity\ESAPI.properties
Not found in SystemResource Directory/resourceDirectory: .esapi\ESAPI.properties
Found in 'user.home' directory: C:\Documents and Settings\Administrator\esapi\ESAPI.properties
Loaded 'ESAPI.properties' properties file
Attempting to load validation.properties via file I/O.
Attempting to load validation.properties as resource file via file I/O.
Not found in 'org.owasp.esapi.resources' directory or file not readable: C:\Documents and Settings\Administrator\Desktop\TEM - Workspace\testSecurity\validation.properties
Not found in SystemResource Directory/resourceDirectory: .esapi\validation.properties
Found in 'user.home' directory: C:\Documents and Settings\Administrator\esapi\validation.properties
Loaded 'validation.properties' properties file
java.lang.reflect.InvocationTargetException Encoder class (org.owasp.esapi.reference.DefaultEncoder) CTOR threw exception

本当の答えが早く見つかることを願っています。これは、ESAPI を使用してログインするための私のコードです。

/* throws SQLExceptions */
public void login(String username, String password)
{
    try
    {
        if(con == null)
            connect();
        if(con != null)
        {
            Codec ORACLE_CODEC = new OracleCodec();

            String query = "SELECT * FROM tblmember where username = '"+ ESAPI.encoder().encodeForSQL(ORACLE_CODEC, username) +"'AND password '"+ESAPI.encoder().encodeForSQL(ORACLE_CODEC, password)+"' FROM ";

            stm = con.createStatement();
            rs = stm.executeQuery(query);

            if(rs.next())
            {
                System.out.println(rs.getString("address"));
                System.out.println(ESAPI.encoder().encodeForSQL(ORACLE_CODEC,"address"));
            }
        }
        else
        {
            System.out.println("Not Connected!");
        }
    }
    catch(Exception ex)
    {
        System.out.println(ex.getMessage() + " login");
    }           
}

public static void main(String[] args) throws SQLException 
{
    SQLInjection sq = new SQLInjection();
    sq.login("username", "password");
}

ご回答ありがとうございます:)

4

3 に答える 3

2

API の使用に関するヒントを提供するために、付属のドキュメントを必ずお読みください。API の使用に役立つ情報が見つかる場合があります。これは依存関係の問題だと思います。ここで確認できます。

お役に立てれば。

于 2012-12-18T07:36:09.990 に答える
1

これには間違った API を使用しています。Java は、準備済みステートメントを使用してクエリで入力をエスケープすることを回避するための正しいメカニズムを既に提供しています。ESAPI は入力の検証には問題ありませんが、これを行うために文字列を連結したくない場合があります。率直に言って、私は ESAPI が動作するためにロードしなければならないすべてのライブラリが好きではありません。

public void login(String username, String password)/*throws SQLExceptions*/{
    try{
        if(con == null)
            connect();
        if(con != null){

            String query = "SELECT * FROM tblmember where username = ? AND password = ? FROM usertable";

            stm = con.prepreStatment(query);
            stm.setString(1, username);
            stm.setString(2, password);
            rs = stm.executeQuery(query);

            if(rs.next()){
                System.out.println(rs.getString("address"));                    
            }
        }else
            System.out.println("No user found with that username and password.");
        }
    }catch(Exception ex){
        System.out.println(ex.getMessage() + " login");
    }

}
public static void main(String[] args) throws SQLException {
    SQLInjection sq = new SQLInjection();

    sq.login("username", "password");
}
于 2012-12-18T03:43:10.793 に答える
0

Hiro2Kは絶対に正しいです。OracleCodecおよびその他の同様のSQLDBコーデックは、パラメータ化された型の代わりになることを意図していません(Javaでは、PrepareStatementsを使用)。むしろ、PrepareStatementを使用できない可能性のある(できればごくわずかな)ニッチなケースを対象としています。1つの例として、内部でOracle JDBCドライバーを呼び出すことがわかっているサードパーティAPIを呼び出す必要があるが、そのAPIがパラメーター化された型を使用しているかどうかがわからない場合があります。

ただし、そうは言っても、ESAPIを呼び出す方法で、DefaultEncoderCTORがInvocationTargetExceptionをスローする結果となるようなことは何も見られません。それは私が前に見たことがないものです。ESAPI.propertiesファイル内の何かに関連している可能性があります(たとえば、ESAPI2.0.xでESAPI1.4ESAPI.propertiesファイルを使用しようとした場合)。

例外スタックトレースを投稿して、確認できるようにしてください。バグを見つけた可能性があります。

ありがとう、

-ケビンウォール

于 2012-12-18T04:05:58.903 に答える