6

そのため、ユーザーが選択したユーザー名を使用して登録し、大きなテキスト ブロックを送信してコメントを追加できるサイトを持っています。現在、XSS を回避するために、データベースへの入力時にデータに strip_tags を使用し、属性ではなく本体のデータのみを出力しています。現在、サイトに変更を加えています。そのうちの 1 つは、誰かがユーザー名 (リンク) をクリックしたときに読み込まれるユーザー ページを作成することです。これは次のようになります。

<a href="example.com/user/<?php echo $username; ?>">...</a>

$username 変数の場合、誰かが挿入できるのではないかと心配しています

<a href="example.com/user/user" onClick="javascript:alert('XSS');">...</a>

これに関する他のSOの投稿をたくさん読んだことがありますが、白黒の答えはありませんでした。入力の strip_tags に加えて、出力のすべてのテキストで次を使用すると:

echo htmlspecialchars($string, ENT_QUOTES, 'UTF-8');

javascript:インライン構文を使用するものを含め、すべての XSS 攻撃を阻止するのに十分でしょうか?

また、「Me > you」などを削除せずに実際の html タグを削除する方法はありますか?

ありがとう!

4

2 に答える 2

3

PHP5 Certification Study Guide によると、セキュリティに関する 2 つのゴールデン ルールがあります。

  1. フィルター入力
  2. エスケープ出力

現時点では、問題の片面しか見ていません。

しかし、私はhtmlentitiesを好むでしょう。

于 2011-08-15T00:12:19.480 に答える
1

エスケープはコンテキストに依存します。URL の場合は、URL エンコーディング (%xx) を使用しますが、完全な URL が「javascript:」で始まっていないことも確認してください。onclick-attribute の構文は必要ありません。Onclick は JavaScript イベント ハンドラーであるため、その中のすべての JavaScript が実行されます。

さまざまなコンテキストでエスケープする方法については、OWASP XSS 防止チート シートを参照してください。

于 2011-08-16T16:04:58.493 に答える