11

ユーザーが LAMP 環境 (debian、apache、php、mysql) で Web サイトの一部の側面 (はい、ある種の cms) を動的に管理できるようにする Web アプリケーションを開発しました。

たとえば、彼らは私のサーバーのプライベート エリアでニュースを作成し、これは cURL リクエスト (または ajax) を介して Web サイトに公開されます。

ニュースは WYSIWYG エディターで作成されます (現時点では fck、次の将来には tinyMCE になる可能性があります)。

したがって、html タグを禁止することはできませんが、安全にするにはどうすればよいでしょうか? どのようなタグを削除する必要がありますか (javascript?)? それはサーバーセーフであることを意味します..しかし、「法的に」安全であるにはどうすればよいですか? ユーザーが私のアプリケーションを使用して xss を作成した場合、法的な問題が発生する可能性はありますか?

4

10 に答える 10

14

PHPを使用している場合、優れた解決策はHTMLPurifierを使用することです。悪いものを除外するための多くのオプションがあり、副作用として、整形式の html 出力が保証されます。敵対的な環境になる可能性があるスパムを表示するために使用します。

于 2009-03-31T15:40:19.877 に答える
12

何を削除しようとしているかは重要ではありません。誰かが常にそれを回避する方法を見つけます。参考として、このXSSチートシートをご覧ください。

例として、この有効なXSS攻撃をどのように削除しますか。

<IMG SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29>

最善のオプションは、受け入れ可能なタグのサブセットのみを許可し、それ以外のものはすべて削除することです。この方法はホワイトリストとして知られており、XSSを防ぐための最良の方法です(HTMLを禁止する以外に)。

また、テストでは虎の巻を使用してください。あなたのウェブサイトであなたができる限り多くを発射して、XSSを実行するいくつかの方法を見つけようとします。

于 2009-03-31T15:32:34.390 に答える
6

ここでの一般的な最善の戦略は、安全であるとみなす特定のタグと属性をホワイトリストに登録し、他のすべてをエスケープ/削除することです。たとえば、賢明なホワイトリストはです<p>, <ul>, <ol>, <li>, <strong>, <em>, <pre>, <code>, <blockquote>, <cite>。または、安全なHTMLに簡単に変換できるTextileMarkdownなどの人間に優しいマークアップを検討してください。

于 2009-03-31T15:31:57.713 に答える
2

HTMLを許可するのではなく、HTMLに変換できる他のマークアップが必要です。たとえば、ユーザー入力から不正なHTMLを取り除こうとすることはほぼ不可能です。

<scr<script>ipt etc="...">

これから削除すると、

<script etc="...">
于 2009-03-31T15:31:17.573 に答える
1

stackoverflowが使用するホワイト リスト アプローチの C# の例については、このページを参照してください。

于 2009-03-31T15:42:19.903 に答える
1

Kohana のセキュリティ ヘルパーは非常に優れています。私が覚えていることから、それは別のプロジェクトから取られました。

しかし、私はテストしました

<IMG SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29>

LFSR Consulting's answerから、それは正しくエスケープされました。

于 2009-11-09T01:21:16.240 に答える
0

If it is too difficult removing the tags you could reject the whole html-data until the user enters a valid one. I would reject html if it contains the following tags:

frameset,frame,iframe,script,object,embed,applet.

Also tags which you want to disallow are: head (and sub-tags),body,html because you want to provide them by yourself and you do not want the user to manipulate your metadata.

But generally speaking, allowing the user to provide his own html code always imposes some security issues.

于 2009-03-31T15:38:05.530 に答える
0

HTML をまったく許可するのではなく、BBCode や Markdown などの HTML の代用を実装することを検討することをお勧めします。

于 2009-03-31T15:41:41.217 に答える
0

このphp strip_tags関数を使用するのは、ユーザーが安全に投稿できるようにするためであり、投稿で使用できるタグをいくつか許可するため、スクリプトインジェクションによって誰もあなたのWebサイトをハッキングできないため、strip_tagsが最適なオプションだと思います

このphp関数のコードについては、ここをクリックしてください

于 2018-01-10T17:39:58.483 に答える