私は、ログインしたユーザーがWYSIWYGエディタを使用して記事をページに投稿する権限を持つエンタープライズレベルのアプリケーションを持っています。 (このアプリケーションをウェブサイトビルダーとみなすことができます)Laravelを使用してWYSIWYGエディタを許可し、XSS攻撃を無効にするにはどうすればよいですか?
すべて問題なく動作しますが、問題はあります。
WYSIWYGエディタポストの記事、Laravelは好きではないので、Laravelの
alpha_num
チェックを渡すことはできませんまた、いくつかのローカライズされた文字列の文字を含むHTML。 (そのため、我々は検証チェックにそれを使用しないでください。)我々は、彼らがWYSIWYGエディタを使用していくつかの基本的なスタイリングをしたいことがあるので
<
、"
、>
のような文字を許可する必要があり、そうエコーながらhtmlspecialchars()
はオプションではありません/衛生的な値は、<br>
のような有害なものが壊れているためです。ユーザーは
<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
の上にカスタムルールを作成することを考えています。
これは良い方法ですか?より良い選択肢はありますか?このような問題をどうやって解決しますか?
注:既に巨大なサイズのアプリケーションを開発しており、最も迅速でメンテナンス性の高いソリューションに依存していますのでご注意ください。
少し追加したいです。現在、HTMLPurifier :: purify()によって検証されるLaravel(例:email | alpha | alpha_dash | custom_validations)によって検証されない入力はすべて渡します。より速い方法があれば教えてください! – Aristona
私はhtmlpurifierを使って "検証"しません - むしろ入力が "安全"であることを確認するためにこれを使用してください。フィールドが必要な場合、私がlaravelで行う唯一の検証は「必須」です。 - 詳細については私の答えを参照してください –