1

ユーザーがリンクを作成できる Web 環境をセットアップしています、href 属性を変更することしかできず、<a>タグ自体を入力することはできません。

したがって、基本的に任意の href 値が許可されます。http/ftp/mailto/何でも。

このように href 属性を開いたままにしておくと、私のサイトに XSS やその他のリスクはありますか? はいの場合、それらは何であり、どのように処理する必要がありますか?

4

2 に答える 2

3

javascript:またはおそらくなどの URL スキームがありdata:、ユーザーが騙されてクリックすると、それ自体が XSS ベクターとして機能する可能性があります。既知の安全な URL スキーム ( 、、など) のホワイトリストを維持し、そのようなスキームで始まらない URL を禁止する必要があります。httphttpsftp

既知の危険な URL スキームを単純にブラックリストに登録することは安全な方法ではないことに注意してください。これは、攻撃ベクトルとして使用される可能性のあるすべてのスキームを知ることはできないためです (これは、ユーザーがインストールしたサードパーティ ソフトウェアなどに依存する可能性があるため)。特に、URL スキームでは大文字と小文字が区別されないことに注意してください。で始まる URL を単純に許可しない単純なブラックリストの実装はjavascript:、URL で簡単にバイパスされる可能性がありjAvAsCrIpT:ます。

(必要に応じてスキームのない相対 URL を許可することもできますが、その場合は、攻撃者が有害な絶対 URL を相対 URL として偽装できないように、標準に従って保守的に解析するようにしてください。特に、私は:最初のスラッシュ ( ) の前にコロン ( ) を含む URL がある/場合は、ホワイトリストの対象となる絶対 URL として扱うことをお勧めします。念のため./、相対 URL の前に文字列 " "を追加することもできます。潜在的な解析のあいまいさを排除するために、 " /" または " " で始まっていないもの。)./

確認する必要があるもう 1 つのことは、HTML 属性に埋め込まれるURL (特にユーザー提供のもの)を含むすべての文字列を適切にHTML エスケープすることです。特に、すべての文字を文字エンティティに置き換える必要があり、(二重引用符で囲まれた属性の場合) すべての文字を. withとwith を置き換えることも良い考えです。最も安全な方法は、(英数字などの既知の安全な文字以外の) 文字を対応する HTML 文字エンティティに実際に置き換えることです。いずれにせよ、プログラミング言語にはおそらくこれを行うための標準関数またはライブラリがあります ( PHP など)。&&amp;"&quot;<&lt;'&#39;htmlspecialchars()

Ps。実装が抵抗できる必要がある可能性のある攻撃の例については、 OWASP XSS フィルター回避チート シートも参照してください。

于 2013-11-14T12:16:24.903 に答える
1

href 値が有効な URL であることを確認する必要があります。ユーザー入力をエスケープしないと、mySQL インジェクション攻撃が可能になります。

また、ユーザーは javascript を入力することもできます。

<a href="javascript:window.close();">Javascript will close the browser window on click</a>
于 2013-11-14T08:49:57.793 に答える