View Full Version : Ext.grid.EditorGridPanelのクロスサイト・スクリプティング対策
Mari
24 Jul 2009, 11:52 PM
Ext.grid.EditorGridPanelを使用して、入力可能なgridを実現しています。
入力値としてHTMLタグを入力した場合、フォーカスアウトで入力値がrenderされる際、クロスサイト・スクリプティングが発生してしまいました。
例えば、以下のサンプル画面でも再現できます。
http://extjs.com/deploy/dev/examples/grid/edit-grid.html
入力値としてBRタグなどを入力して、フォーカスアウトで発生します。
また、Submitしてしまうような内容を記述した場合でも、動作してしまいます。
render前に個別にescape処理を実装すれば、解決するとは思うのですが、みなさんどのような対策を講じていらっしゃるのでしょうか?
また、Extで何かチェックを行えるようなものは存在しますか?
よろしくお願いします。
Tommy1969
25 Jul 2009, 10:02 AM
とりあえず、renderer に Ext.util.Format.htmlEncode を指定してますねぇ…。
他にもっといい手段があったような気がするのですが、思い出せない…。:((
yuki
26 Jul 2009, 10:00 PM
この現象そのものだけでは、XSSとはならないと思います(このグリッドで入力されたデータをサーバー側で適切に処理しないとXSSになってしまいますが)。
Ext.grid.EditorGridPanelを使用して、入力可能なgridを実現しています。
入力値としてHTMLタグを入力した場合、フォーカスアウトで入力値がrenderされる際、クロスサイト・スクリプティングが発生してしまいました。
例えば、以下のサンプル画面でも再現できます。
http://extjs.com/deploy/dev/examples/grid/edit-grid.html
入力値としてBRタグなどを入力して、フォーカスアウトで発生します。
また、Submitしてしまうような内容を記述した場合でも、動作してしまいます。
render前に個別にescape処理を実装すれば、解決するとは思うのですが、みなさんどのような対策を講じていらっしゃるのでしょうか?
また、Extで何かチェックを行えるようなものは存在しますか?
この問題については英語のフォーラムでも過去に白熱した議論 (http://extjs.com/forum/showthread.php?t=13913)が交わされているのですが(クライアント側で処理するべき vs サーバー側で処理するべき vs その他)、HTMLタグを外すだけなら、Jackがここ (http://extjs.com/forum/showthread.php?p=68231#post68231)で書いているような方法でどうでしょうか?
grid.on('validateedit', function(e){
e.value = Ext.util.Format.stripTags(e.value);
});
ご返信ありがとうございました。
たしかに、XSSと呼ぶには語弊がありますね。8-|
こちらでも、エスケープ処理を行っていまして、実際には不正なデータがサーバー側へ渡ることはありません。
しかし、rendererでのgrid表示の際、エスケープなどは行っておりませんでしたので、
<BUTTON type="button" onClick="history.back();">
などと入力した場合、カラムの中に突然ボタンが出来るなど、表示不正や、ボタンが動作する状態となってしまいました。
また、以下2つの仕様もあります。
①validationチェックは、各カラムのonblurでは無く、サーバーへリクエストする際に、一括で全てのgridカラムに対して行う。
②入力値に関しては、grid内のテキスト入力時の動作も、通常のHTMLのInputのテキストと同様の動作とする。
(例えば、<BR>を入力した場合でも、renderer後も文字列として<BR>を表示しておくなど、一括チェックが動作するまでは、EditorGridPanelに入力した内容はそのまま表示する。)
上記仕様の為、実態値は変更せず、rendererする値のみExt.util.Format.htmlEncodeを適用する方法で実現しようと思います。
ありがとうございました。
Powered by vBulletin® Version 4.1.5 Copyright © 2012 vBulletin Solutions, Inc. All rights reserved.