危険な文字の注入のためのパラメータ化戦略


-2

私は電子メールIDを受け入れるための入力テキストフィールドを持っています。電子メールIDがユーザーによって入力されていない場合、 Javaスクリプトを使用してクライアント側で というエラーメッセージを表示すると、「有効な電子メールIDを入力してください」というメッセージが表示されます。コードは

if(EmailIdIsNull) 
{ 
    error = "Please enter valid email id"; 
    //Submit this error message to the form 
} 

チェックを扱うこの方法では、危険な文字インジェクションの脆弱性である、等です。用など。 、一つは "有効な電子メールIDを入力してください" に変更し、このためのソリューションは以下のように与えられた

"%[email protected]%3ECIMG+SRC%3D.html%22%3E"、へ

"If available, use structured mechanisms that automatically enforce the separation 
between data and code. These mechanisms may be able to provide the relevant quoting, 
encoding and validation automatically, instead of relying on the developer to provide 
this capability at every point where output is generated" 

上記の解決策の説明を探しています。また、どのように私のケースでは、メールのIDのクライアント側のチェックに関しては、 のソリューションの上に適用することができますか?

  0

多分それは私ですが、私はあなたが何を求めているのか分かりません。 09 8月. 132013-08-09 09:41:47

  0

@Svetlana「利用可能であれば、自動的に分離を強制する構造化されたメカニズムを使用してください......」私の質問で言及したのは... 09 8月. 132013-08-09 09:47:43

  0

引用符の可能な出典:http:// cwe .mitre.org/data/definitions/116.html(@Svetlana) 09 8月. 132013-08-09 09:58:59

+1

あなたのコードがインジェクション攻撃に対して脆弱であると思われる理由を説明してください。私の知る限り、どこにもユーザーデータが注入されていません。 09 8月. 132013-08-09 10:03:27

  0

私はあなたの疑念がよりよく説明されるべきだと思います。その文の問題は何ですか? 09 8月. 132013-08-09 10:04:35

  0

@VikasVいいえ、まだ悪い質問です。あなたは問題を正しく説明していません。あなたが恐れているのは何ですか?他の文字列に "有効な電子メールIDを入力してください"という文字を変更する人について話していますが、その人はどうしますか?私はあなたの質問を解読するのに苦労している唯一の人ではありません。 09 8月. 132013-08-09 10:09:56

  0

@Perseids +1あなたのコメント。私はあなたがこの質問の真の問題を理解している唯一の人だと思います。 09 8月. 132013-08-09 10:29:13

  0

私のコードがインジェクション攻撃に対してどのように脆弱であるかわかりません。これを報告したセキュリティツールから私のウェブサイトへの侵入テストがありました。そして、「利用可能であれば、分離を自動的に実施する構造化されたメカニズムを使用してください....」という意味の解答は、それが何を意味するのか理解できませんでした。その文の説明を探しています。 09 8月. 132013-08-09 10:49:18

2

まず、は決してあらゆる種類の検証のためにクライアント側のコードに依存しないようにする必要があります。クライアント側で検証をバイパスするのは簡単ではありません。

代わりに、常にはサーバー側の入力をサニタイズしてエスケープする必要があります。確かに、クライアント側の検証を実行して良好なユーザーエクスペリエンスを確保できますが、常にもサーバーで検証されます。

私は、電子メールアドレスがどこかのデータベースに書き込まれると考えます。その場合は、動的SQLの代わりにparameterizedクエリを使用してください。それはSQLインジェクション攻撃からあなたを守ります。 XSS攻撃を防ぐために、データを出力するときはエスケープする必要があります。 OWASPのXSSSQL injection予防チートシートはここで参考になります。

  0

あなたの答えを親切に編集し、「可能であれば、自動的に分離を強制する構造化されたメカニズムを使用してください。 09 8月. 132013-08-09 09:48:42

+1

@VikasVパラメータ化されたクエリ** IS **はデータとコードの分離を強制します。私はあなたが私の答えでリンクを読むことをお勧めします。 09 8月. 132013-08-09 09:49:38

  0

-1質問自体はひどく書かれていて問題を十分に説明していませんが、あなたの答えは質問とは関係ありません。また、それはデータとコードの分離という意味ではありません。 09 8月. 132013-08-09 09:53:30


1

パラメータ化されたクエリまたはprepared statementsは、「データとコードの分離を自動的に実行するメカニズム」の例です。

separation between data and codeがない場合の問題は、ユーザーが導入したデータをコードで注入し、プログラマが考えない方法でアプリケーションを操作できることです。

「関連する引用符、エンコードおよび検証を自動的に提供する」その他のメカニズムについては、OWASP ESAPIまたはJava Spring Security Frameworkに関する情報を検索できます。

「出力が生成されるすべてのポイントでこの機能を提供するために開発者に依存する」という推奨は、おそらく人間に依存するとエラーが発生する可能性があるからです。プログラマが入力検証を逃すことを不可能にする集中APIを使用すると、より安全になります。