web-dev-qa-db-ja.com

HTMLアンカーへのテキストリンクを安全に変更する

テキストリンクを実際のアンカーに変更しようとしています。たとえば、http://example.com<a href="http://example.com">http://example.com</a>に変更したいとします。

これはユーザー指定の文字列であるため、XSSなどに特別な注意を払う必要がありますか(たとえば、すべての<>を削除する)、これはこの状況では気にしないでください。そのような機能を構築するときに覚えておく必要がある他のことはありますか?

1
Andreas Arnold

リンクを変換するだけの場合、最も安全なオプションは、サニタイズとホワイトリストを使用することです。基本的に、許可された値のリスト。これにより、指定していないものが渡されるのを防ぎます。常に信頼できるサニタイズ機能とホワイトリストを使用してください。自分が何をしているのかを理解していない限り、独自に作成することはお勧めしません。参考のために次のようなページを参照してください(もちろん、すべてのサニタイズ/検証がサーバー側で行われていることを確認してください)。

http://jsoup.org/cookbook/cleaning-html/whitelist-sanitizer

ユーザーにマークアップ言語を使用させる可能性は、タグが挿入されたXSSの良い提案だと思いますが、URIが連結されたXSSの問題には実際には対処していません。

以前の回答者の回答では、基本的に単純な攻撃にのみ備える必要があると答えています。そうしないと、「うさぎの穴を降りる」のは無謀で素朴なので、その場合は銀行の金庫室に単純なロックをかけないのはなぜですか。 ?

6
mrnap

私はオープンソースのフォーラムパッケージの側で仕事をしています。コードは、BBCodeタグを使用するのが面倒なユーザーのために、入力されたURLをリンクに変換するために非常に複雑なアルゴリズムを使用しています。

多くのバグ修正があり、修正すべきバグはまだいくつか残っています-そして私が得ることができる唯一の結論は、ユーザーの自動変換について心配しないことです。許可するマークアップ言語を使用するようにします。セキュリティ上の問題がいくつかありますが、テキスト内のURLを自動解析するよりもはるかに少なくなります。

2
AnonJr

他のサイトに対するXSS攻撃を防ごうとしていますか?明らかなスクリプトやHTMLマークアップが含まれているかどうかに関係なく、ユーザーがURLをクリックしたときに他のサイトがどのように応答するかを予測することはできません。したがって、危険である可能性があることがわかっているものを抽出/サニタイズしようとすることは、隠すことによるセキュリティにすぎません。

これを続行することにした場合(多くのサイトが実行します-他のサイトへのリンクを提供するのはWebの性質上です)、自分のサイトに向けられた可能性のある攻撃についてのみ心配する必要があります-そして単にURLが整形式で十分ですが、それは簡単な作業ではありません。

1
symcbean