2016-09-21 5 views
2

私は、HTML入力からユーザー入力を受け取り、さらに処理するためにそれをtomcatサーバーに送信するWebアプリケーションに取り組んでいます。regexチェックを実行する際にHTMLエスケープが必要ですか?

現在、私のワークフローは次のようになります。

クライアント

JS - > HTML入力を取る - >正規表現チェックを行う - >成功し場合 - > $ .post(...)

サーバー

は、ポストデータを受け取る - >正規表現チェックを行う - >成功し場合 - >プロセスデータ

私understandigから

が、これは問題ないはずですし、HTMLエスケープ

が、まだ許可されていない何かにこそこそする方法があることができれば、私は思っていたを行う必要はありません。


さらに思考:私の.javaで

public void doPost(HttpServletRequest request, HttpServletResponse response){...} 方法が送信されたパラメータを受け取るために、次のないファイル:

(明らかに)
String post_param_1 = request.getParameter("param_1"); 

このその特定のパラメータに対して正規表現チェックが実行される前に発生しなければなりません。

質問#1:これは、攻撃者がJavaコード内で意図しない振る舞いをする「オープンウィンドウ」になる可能性がありますか?攻撃者はいない(たとえば)正規のウェブサイトを通じて、別々のツールを使用して、ポストの要求を送った可能性が

質問#2:

request.getParameter("param_1").matches(regex_string) 
:Q#1は、真であることが判明し
場合のようなものをやってできました

これを回避できますか?

質問#3:私のアプローチが十分であれば、somepointでHTMLエスケープを行うのが望ましいですか(おそらく、JSの入力をグライングしてから正規表現を実行するまで)。

最後に、このトピックに関するご意見やご提案はありますか?または、クライアントやサーバーの正規表現チェックが多すぎるようなものがありますか?仮定すると、

よろしく Alkahna

答えて

0

は、 "HTMLエスケープ" あなたは自分のHTMLエンティティ(&lt;&gt;)にHTMLの特殊文字(のような<>)を変換する意味で、その後の答えは非常に簡単です:

入力をユーザーに表示するときに、ユーザー提供の入力をエスケープするだけで済みます。

プレーンテキスト形式*でデータベースに保存します。これにより、(検索のような)バックエンドのテキスト処理が容易になり、他のHTML以外の形式にエクスポートされる可能性もあります。

テキストはHTMLページに挿入するときにのみエスケープします。その後、JSPページで使用すると、これらのいずれかを実行したい、あなたはデータベースからテキストを検索し、「テキスト」と呼ばれるリクエスト属性にそれを保存した例えば言う:

<c:out value="${text}" /> 
${fn:escapeXml(text)} 

必要な特別なをエスケープしますこの時点でその中の文字。

入力をデータベースに格納せずに他の処理を行う場合は、同じ原則が適用されます。プレーンテキストで処理し、HTMLドキュメントに挿入するときにのみエスケープします。あなたの番の質問について


"Could this maybe be an "open window" for attackers to sneak in/ cause unwanted behaviour within the java-code?"

私はあなたがここで、求めているものは本当にわかりません。明らかに、リクエストのパラメータマップから何かを行うには、パラメータを取得する必要があります。ユーザーはJavaコードを挿入できません。 request.getParameter("param_1")nullを返す場合request.getParameter("param_1").matches(regex_string)を行う

は、NullPointerExceptionが発生する可能性があります。あなたは、おそらくこのような何かをしたい:

String post_param_1 = request.getParameter("param_1"); 
if (post_param_1 != null && post_param_1.matches(regex)) { 
    // param present and valid 
} 

私は答えこれ以上私の主なポイントだと思います。


*私は明らかにあなたは、あなたの答えのために、この

+0

THXを行う場合、適切SQLインジェクションを防ぐために必要な「プレーンテキスト形式で保存する」と言います。一般的にエスケープするには:私は入力を受け取り、サーバー側で処理します。テキストの表示はすでにエスケープして処理されます。 '1'では一般的に注射攻撃を目指していた(JSも同様)。それは私がここで安全な側にいたい理由です。 '2)'のために、あなたは正しいです、私は現在自分のコードでやっていることを現時点で行います。したがって、私のアプローチは誤入力(正規表現)を防止するのに十分であり、その自動注入攻撃も同様であると結論づけることができます。 – Alkahna

+0

はい、テキストをユーザーに表示するときにエスケープするだけで、JS注入を防ぐことができます。 – megaflop

関連する問題