2016-10-27 4 views
2

をてhrefに指定されたモデルの属性でのlink_toを使用して:のRails:防止XSS例LINK_TO次のことを考慮すると

link_to "Personal Website", @user.website

私はXSS攻撃に対してそれを保護するにはどうすればよいです。 ユーザーテーブルが外部DBにあるため、信頼できません。私はsanitizeとhを使用して異なるアプローチを試しましたが、javascript:alert('XSS')で自分のローカルDBユーザーのWebサイトに置き換えたときに、リンクをクリックしてもjavascriptが実行されています。コントローラに:あなたは "JavaScriptを" 削除することができ、事前に

おかげで、

答えて

0

。これは醜いですが、いくつかの注意点があります(ブラウザは「javascript:」と受け入れられるかもしれません)。これは非常に強力なコントロールではありません。

リンクhrefに「http://」(または「https://」)を静的に追加して、ユーザー入力から削除することができます。 「javascript:」は、hrefの最初の文字である場合にのみ機能し、開始点としてhttp://を静的に追加すると、XSSが緩和されます。

Content-Security-Policyheaderを使用して、インラインJavaScriptが実行されないようにすることもできます。これは、コードを構造化する方法に影響を及ぼし、すべてのブラウザでサポートされているわけではありませんが、の場合、優れたコントロールです。

いつものように、複数の防衛層(上記の複数)を実装すると、アプリケーションをより堅牢にし、攻撃から保護することができます。

+0

あなたの答えをありがとう。 –

+0

私の回避策はあなたの最初の提案です。私はbrakemanを使用しており、link_to hrefの '危険なモデル属性 'について警告しています。だから私は必要なコントロールを扱うヘルパーで 'get_user_url'メソッドを使いました。 BrakemanはもうXSS攻撃について警告しておらず、少なくとも 'javascript:'は実行されていません。しかし、あなたが言ったように、それはちょっと醜いので、それはもっとエレガントなレールの方法かもしれないと思ったのです。 'Content-Security-Policy'の提案に感謝します。私はHTTP応答ヘッダーについてもう少し詳しく掘り下げる時間をとったが、それは有益なものだった。 –

関連する問題