5

私は、一般の人々 (つまりすべての人) が TinyMCE を介して独自のプロジェクト ページに HTML を挿入できるプロジェクトに取り組んでいます。誰でもこの機能を使用できるため、TinyMCE の出力をデータベースに挿入し、ユーザーが挿入したとおりに別のページに表示する 100% 安全な方法が必要です。

XSS、SQL インジェクション、およびその他すべてのがらくたは、新しい Web サイトに必要なものではありません。htmlentities -> htmlspecialchars を実行し、後で htmlentities_decode を使用することもできますが、これは 100% 安全であり、それを行う最善の方法ですか?

4

3 に答える 3

8

ほとんどの場合、SQL インジェクションは準備済みステートメントを使用することで簡単に回避できます。

ユーザーが HTML マークアップを投稿できるようにすることを計画している場合、XSS はより困難になります。<script>すべてのタグ、タグからのすべてのon*属性、すべてのURLを削除する必要がありますjavascript:。それでも、入力 HTML を安全にすることはおそらく完全には保証されません。役立つHTMLPurifierなどのライブラリがありますが、HTML を許可している限り、悪意のあるものを通過させるリスクがあります。

代わりに、マークダウンやウィキテキストなどを実装するライブラリを使用できます。これにより、ユーザーが入力できる内容が大幅に制限されますが、コンテンツをある程度マークアップすることはできます。完全な安全性はありません (悪意のあるサイトへのリンクを投稿し、ユーザーがクリックスルーすることを期待することはできますが、実際にそうするほど単純な人もいます)、TinyMCE などのリッチ エディターを何らかの方法で使用することはできません。しかし、HTML をサニタイズするよりも、マークダウンをサニタイズする方がはるかに簡単な作業です。

于 2012-07-21T11:38:18.997 に答える
3

それは不可能です。フィルタリングすることは良い点だと思いますが、最終的には html を受け入れると完全にロックすることはできません。bbcode、マークダウンなどを見て、いくつかの代替案を確認してください。

HTML コードを受け入れることにした場合、それは実行する必要があることをフィルタリングするだけではなく、エンコーディングでさえ深刻なセキュリティ問題を引き起こす可能性があります。たとえば、UTF-7 を検索して、どのような問題があるかを確認します。ここでいくつかの例を参照してください: http://www.webappsec.org/projects/articles/091007.txt

于 2012-07-21T11:35:06.563 に答える
-3

HTML を保存することと表示することは、2 つの異なることです。

HTML を MySQL に保存するには、これmysql_real_escape_string()で十分であり、SQL インジェクションから保護されます。

の表示については、依存します。ユーザーが HTML を記述できるようにしたいが、XSS 攻撃などから保護したい場合は、HTMLPurifier などのフィルターを使用する必要があります (これが Stackoverflow の機能です)。これを行う必要があるのは、データベースから HTML を取得した後だけです。

htmlentities()またはを使用する必要はありませんhtmlentities_decode()

于 2012-07-21T11:31:20.367 に答える