2

ユーザーが URL を送信して、その URL をリンクとして他のユーザーに表示できるようにしたい。

ユーザーが送信したものを単純に再表示すると、次のような URL に対して自分自身を開放したままにします

http://somesite.com' ><script>[any javacscript in here]</script>

他のユーザーに再表示すると、何か厄介なことをするか、少なくともそれを防がなかったために私が専門外に見えるようになる.

すべての有効な URL を保持するが、エクスプロイト/ばかげたことを取り除くように URL をクリーンアップする、できれば Java のライブラリはありますか?

ありがとう!

4

3 に答える 3

3

あなたが探しているのは出力エンコーディングだと思います。Javaでエンコーディングを実行するための試行済みのテスト済みの方法であるOWASP ESAPIをご覧ください。

また、ユーザーが悪意のある URL を送信しているかどうかを確認したい場合は、Google マルウェア データベースに対して確認できます。そのためにSafeBrowing API を使用できます。

于 2012-08-30T10:59:12.457 に答える
3

を含む URL'は完全に有効です。エスケープせずに HTML ドキュメントに出力している場合、問題は入力チェックではなく、HTML エスケープの欠如にあります。可変テキスト (URL を含む) を HTML ドキュメントに出力するたびに、HTML エンコーディング メソッドを呼び出していることを確認する必要があります。

Java には組み込みの HTML エンコーダーがありません (見栄えが悪い!) が、ほとんどの Web ライブラリには組み込まれています (選択するか、いくつかの文字列を置き換えて自分で記述します)。JSTL タグを使用する場合escapeXml、デフォルトで無料で使用できます。

<a href="<c:out value="${link}"/>">ok</a>

主な問題は HTML エスケープですが、入力 URL が有効であることを検証して間違いを検出することは、潜在的に有益ですnew URL(...)

http://URL が、またはなどの既知の適切なプロトコルで始まっていることも確認する必要がありますhttps://javascript:これにより、HTML インジェクションと同じくらい簡単にクロスサイト スクリプティングにつながる危険な URL プロトコルを使用する人を防ぐことができます。

于 2012-08-30T14:48:48.920 に答える
1

Apache バリデータ URLValidatorを使用できます

UrlValidator urlValidator = new UrlValidator(schemes);
if (urlValidator.isValid("http://somesite.com")) {
   //valid
}
于 2012-08-30T10:09:39.203 に答える