java
  • jdbc
  • sql-injection
  • 2012-04-28 19 views 2 likes 
    2
    私はそれが仕事の罰金

    停止SQLインジェクション

    con = DriverManager.getConnection("", "", ""); 
    
    Statement statement = con.createStatement(); 
    
    ResultSet rs= statement.executeQuery("SELECT email,pass FROM db_pass where email='" + email + "'and pass='" + password + "'" ); 
    
    if (rs.next()) { 
    
        String a=rs.getString(1); 
        String b=rs.getString(2); 
        rs.close(); 
    

    のログインするためのコードの下に使用していますSQLインジェクション を防止するための方法を

    しかし、それは置いとき(ニティンまたは 『1』 = '1)ユーザーはせずにアクセスを取得しています有効なパスワードを設定する

    +0

    これはSQLクエリーバディーです。 – Addicted

    +0

    @ zero0cool - その時点ではスペースは必要ありません。 (確かに、それはより読みやすくなります...しかし、実際に読んでいる人は誰ですか?) –

    +1

    [JavaプログラムでのSQLインジェクション攻撃の防止]の可能な複製(http://stackoverflow.com/questions/9516625/prevent-sql- Javaプログラムのインジェクション攻撃)や他の多くのものがあります。 –

    答えて

    7

    PreparedStatementを使用してください。例を見つけることができますhttp://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

    SQL injectionを避けるには、すべてのクエリをパラメータ化し、 動的連結を使用して動的SQLを作成しないでください。

    +0

    ありがとうpaul ...私はそれを試してみましょう – Addicted

    +0

    +1 - Javaから直接JDBCを使ってSQLを使用する場合、これは間違いなく最も簡単で最も簡単なアプローチです。 –

    +0

    ステファンありがとう – Addicted

    -1

    これを実行する典型的かつ簡単な方法は、ハッシュ操作(md5またはsha1)の結果を比較することです。クエリは、これはあなたがこれを開発しているし、あなたのDB-Systemは、あまりにも利用可能MD5機能を持つ言語で利用可能なMD5機能を持っていることを意味するであろう、しかし

    SELECT email, pass from db_pass where md5(email)='" + md5(email) + "' and md5(pass)='" + md5(password) + "'" 
    

    のようになります(たとえば、MySQLはありません) 。これはSQLインジェクションを完全に不可能にするわけではありませんが、あなたが与えた例に対する優れた基本的な保護です。

    +0

    ありがとうございました。 – Addicted

    +1

    悪い考え。注射から身を守りますが、多くの質問をすることは不可能です。例えば、 '' @ yahoo.com ''の電子メールアドレスを確認する '' LIKE'クエリを実行することができません。 –

    0

    ORM(オブジェクトリレーショナルマッパー)を使用することをお勧めします。 ORMには、通常、SQLインジェクションに対する防御機能が組み込まれています。

    SQLインジェクションを防ぐもう1つの優れた方法は、ホワイトリスト(受け入れ可能なユーザー入力のリスト)を使用することです。ユーザーからの入力を受け取ったら、それがホワイトリストに入っているかどうかを確認します。それが拒否されなければ。

    あなたの場合、可能なユーザー名のホワイトリストと可能なパスワードのホワイトリストが必要です。正規表現を使用して、ユーザー名のホワイトリストとパスワードのホワイトリストを記述することができます。あなた自身の正規表現を自作してはいけませんが、オンラインで利用可能なあらかじめ構築された正規表現がたくさんあります。 SQLインジェクションに脆弱になるという誤った表現をするのは簡単だから、自分で作ってはいけません。

    これは、幸運を助けることを願っています!

    +0

    ええ、それは私を助けます... – Addicted

    -1

    文字列がabc 'の場合は文字列を変換する必要があります。文字列が' 'のような場合は文字列abc' 'をsqlに渡す必要があります。

    関連する問題