1

ユーザーが任意の HTML を入力できる入力フォームがあります。スクリプトタグ以外に何を除外する必要がありますか? これが私がすることです:

userInput.replace(/<(script)/gi, "&lt;$1");

ただし、WMD のサニタイザー(ここでは SO で使用) は、タグのホワイト リストを管理し、他のすべてのタグを除外 (空白) します。なんで?

私はホワイト リストは好きではありません。ユーザーが選択した場合に任意のタグを入力することを妨げたくないからです。しかし、必要に応じて、「スクリプト」以外に、より広範なブラック リストを使用できます。ブラックリストとして何が必要ですか?

4

1 に答える 1

3

簡単な答え:タグできることは何でも。script

scriptJavaScript を実行するためにタグは必要ありません。スクリプトは、ほぼすべてのHTML タグに配置することもできます。スクリプトは、URL、イベント ハンドラーsrcおよび属性に使用される属性を含むがこれらに限定されないスクリプト タグに加えて、さまざまな場所に表示できます。hrefstyle

ユーザーが不要なスクリプトをページに挿入できることは、クロスサイト スクリプティングとして知られるセキュリティ上の脆弱性です。このトピックを読み、XSS 防止チート シートを読んでください。

ユーザーがページに HTML を追加できないようにしたい場合があります。この機能が必要な場合は、埋め込み HTML の使用を無効にできる Markdown などの他の形式を検討してください。または、HTMLPurifier など、すべてのスクリプトを削除しようとするフィルタリング ライブラリを使用することも、安全性の低いオプションです。フィルタリング オプションを選択した場合は、必ず新しいリリースのアナウンスを購読し、新しいエクスプロイトが発見されて回避策が見つかったときに、常にプロジェクトに戻ってバグ修正済みのフィルタ リリースをインストールしてください。

于 2011-09-02T12:39:08.187 に答える