2009-08-20 4 views
0

を回避するための方法をRailsの - 「はRuby on Rails」にクロスサイトスクリプティングを避けるために、どのようにクロスサイトスクリプティング

私は

以下のコードを使用して、私はどのようにしてどこを行う、知りたいですこのスクリプトが動作しているかどうかを確認してください。

+0

"このスクリプトをチェックする"とはどういう意味ですか?テストを使う?サーバーを起動し、ブラウザでページをロードしますか? また、最新バージョンのRails(およびそれ以前のバージョン)では、 "<%= link_to @ user.name、@user%>"などのコードをサポートしています。 – askegg

+0

ユーザの名前としてを割り当て、#{h(@user)とは対照的に #{@user.name}の結果を出力すると、 .name)} h()メソッドが実際にhtmlエスケープを行っていることがわかります。 – Maulin

答えて

2

属性やパラメータなど、サードパーティによって操作されることがあるビュー内のものをエスケープする必要があります。

あなたの例では、<script type="text/javascript">alert("XSS")</script>という名前のユーザーを作成しました。名前の存在を検証しているだけであれば、これは有効です。

<!-- Raw output --> 
<a href="#"><script type="text/javascript">alert("XSS")</script></a> 

クライアントこのページをJavaScriptで表示すると、標準のアラートが表示されます。これは私があなたの視点に助けのJavaScriptを注入できることを示しています。

<!-- Escaped output --> 
<a href="#">&lt;script type=&quot;text/javascript&quot;&gt;alert(&quot;XSS&quot;)&lt;/script&gt;</a> 

クライアントこのページをJavaScriptで有効にすると、標準のアラートが表示されません。

これは、ビューがクロスサイトスクリプティング攻撃に対して脆弱かどうかを検証するために使用できる手法です。

代わりに、HAMLの使用を検討することもできます。 HAMLは、明示的にrawにする必要がない限り、常に出力をエスケープするように設定できます。私はこれがERbを使ったRails 3のデフォルト動作であると信じています。

+0

Railsのすべての組み込み関数(link_toなど)は、デフォルトですでに出力をエスケープしています。これは、Rails 3のerbのデフォルト動作にもなります。 – askegg

+0

'name'パラメータはデフォルトでエスケープされません。 'url_for'によって評価されるオプションだけがエスケープされます。 –

+0

はい - 私はそれを明確にすべきでした:( – askegg

0

Rails 2.xに自動エスケープを追加する場合は、Michael Koziarskiのrails_xssをご覧ください。あなたが探しているものを正確にしていますか?

関連する問題