2013-06-26 17 views
6

私は、ログインしたユーザーがWYSIWYGエディタを使用して記事をページに投稿する権限を持つエンタープライズレベルのアプリケーションを持っています。 (このアプリケーションをウェブサイトビルダーとみなすことができます)Laravelを使用してWYSIWYGエディタを許可し、XSS攻撃を無効にするにはどうすればよいですか?

すべて問題なく動作しますが、問題はあります。

  1. WYSIWYGエディタポストの記事、Laravelは好きではないので、Laravelのalpha_numチェックを渡すことはできませんまた、いくつかのローカライズされた文字列の文字を含むHTML。 (そのため、我々は検証チェックにそれを使用しないでください。)

  2. 我々は、彼らがWYSIWYGエディタを使用していくつかの基本的なスタイリングをしたいことがあるので<">のような文字を許可する必要があり、そうエコーながらhtmlspecialchars()はオプションではありません/衛生的な値は、<br>のような有害なものが壊れているためです。

  3. ユーザーは<script type="text/javascript>alert('Hello');</script>または</div></div></div><div style="width: 100%, height: 100% z-index: 999999">のような投稿をすることができます。セキュリティ上のリスクは非常に高いですが、実際には何も消毒/エスケープできません。ユーザーは引き続き<s<!---->cript>と書いてチェックをパスすることができます。

つまり、要するに、組み込みのLaravelとPHP関数を使用することはできません。私たちはWYSIWYGエディタも無効にすることはできません。なぜなら、WYSIWYGエディタは音声アプリケーションの大半の領域で頻繁に使用されるからです。

これを避けるにはどうすればよいですか?

私は、alpha_num_localised_characters_plus_allowed_html_tagsのように呼び出され、WYSIWYGエディタを含む入力にそのルールを追加する、Laravelのalpha_numの上にカスタムルールを作成することを考えています。

これは良い方法ですか?より良い選択肢はありますか?このような問題をどうやって解決しますか?

注:既に巨大なサイズのアプリケーションを開発しており、最も迅速でメンテナンス性の高いソリューションに依存していますのでご注意ください。

+0

少し追加したいです。現在、HTMLPurifier :: purify()によって検証されるLaravel(例:email | alpha | alpha_dash | custom_validations)によって検証されない入力はすべて渡します。より速い方法があれば教えてください! – Aristona

+0

私はhtmlpurifierを使って "検証"しません - むしろ入力が "安全"であることを確認するためにこれを使用してください。フィールドが必要な場合、私がlaravelで行う唯一の検証は「必須」です。 - 詳細については私の答えを参照してください –

答えて

2

BBCodeまたはMarkdownと同様のタグシステムを使用して、ユーザーが特定の操作を実行できるようにすることができます。こうすることで、あらゆる種類の悪意のあるスクリプトに対して入力が確実に消毒され、ユーザーのコンテンツを表示するときにレクサーとXSSの保護だけを使用することができます。

編集:私は何を意味するかを確認するには、あなたがBBCode pluginと一緒に、あなたのWYSIWYGエディタとしてCKEditorバージョンを使用することができます。

+0

さて、これは素晴らしい感じです。 BBCodeを掲示し同時にWYSIWYGも提供するエディタ?ええ、ええ。どうもありがとう。これから私のプロジェクトにそれを組み込みます!このソリューションは、私が探していたものです。 – Aristona

-1

これはあなたにとってどれほど実行可能かわかりませんが、クイックで簡単な解決方法は、httpOnlyのクッキーを使用することです。それはjavascriptにアクセスできないので、悪意のあるjavascriptの注入を介してXSS攻撃を解決します。あなたはhttpOnly cookieにsenstiveデータを入れて、通常のcookieにはあまり重要ではないデータを入れようとすることができます。これを参照してください:http://www.codinghorror.com/blog/2008/08/protecting-your-cookies-httponly.html

+0

私はクッキーを気にしません。とにかくJavascriptを完全に無効にする必要があります。 – Aristona

1

strip_tagsを通してすべてを実行できますか?最小タグは可能ですか?

あなたはまた、あなたのCSSを超える制御を含むより多くの選択肢を与えるべき html purifierを見てみたいことがあり

私は通常行うことはWYSIWYGコンテンツの2つのコピーの保存です:

  1. オリジナルのフィルタ処理されていないコンテンツ
  2. フィルタリングコンテンツ

これは私が何かVIを見つけた場合、私は元のコンテンツを再処理することができますtalは取り除かれ、編集時に元のHTMLも表示されます。明らかに、フィルタリングされたコンテンツは、サイトに表示されている場所に表示されます。

0

あなたはまた、ブレードテンプレートのもののためにサニタイズする必要がある場合がありますLaravelを使用。あなたは、{{{phpInfo()}}}のようなものにユーザーを入れることを望まない。

WYSIWYGエディタを構築するには、ある程度の信頼性が必要です。あなたが最良のオプションでユーザーを信頼しない場合、以前にカスタムタグを使って説明したことがあります。

関連する問題