2011-07-29 4 views
7

サーブレットAPIは、クッキーを設定するための便利な方法を提供します:サーブレットAPIから設定するときにクッキー値をエスケープする必要はありますか?

response.addCookie(new Cookie(name, value)) 

javadocが伝え:

をバージョン0のクッキーで、値が空白、 括弧、丸括弧、等号、カンマを含めるべきではありません二重引用符、スラッシュ、 疑問符、記号、コロン、およびセミコロン。空の値では、すべてのブラウザで同じように動作しない可能性があります( )。

ただし、これらの文字が値に含まれているとはどうなるでしょうか。

値が信頼できないソースから来た場合、余分な前処理なしでAPIを使用して値を安全に設定できますか、何らかの注入のためにドアを開けますか?

+0

存在する場合、illegalArgumentExceptionが発生します。 – Edd

答えて

6

値が信頼できないソースからのものである場合、余分な前処理なしで値を安全に設定するためにAPIを使用できますか?

いいえ、そうではありません。 APIはあなたのためにこれを処理しません。これは、Javadocで明示的に指定されます。 APIは、バージョン0(Netscape)またはバージョン1(RFC2965)のCookieを使用しているかどうかを事前に知ることはできません。

安全なCookie名/値で終わるように、Cookie名/値をあらかじめURLエンコードするのが最善です。

String safeCookieName = URLEncoder.encode(name, "UTF-8"); 
String safeCookieValue = URLEncoder.encode(value, "UTF-8"); 
response.addCookie(new Cookie(safeCookieName, safeCookieValue)); 
// ... 

また、regexを使用して、すべての不正な文字を事前に削除することもできます。アルファベット文字、数字、ハイフン、アンダースコア、ピリオド、ティルダ、および多分もっと少数のもの(ブラウザに依存します)のみが許されます。他のすべては取り除かれる必要があります。

関連する問題