XSS防犯ガイド【翻訳】
3575 ワード
译文住所:The definitive gide to XSS
何がXSSですか?またの名はサイトを跨ぐシナリオの攻撃と言います.
私達はこのようにXSSを定義します.これはウェブサイトがユーザーの入力を安全に処理していないため、サイトが自分のユーザーを攻撃するメディアになる攻撃です.
通常、ハッカーは私達のウェブサイトの隙を利用して、JavaScriptを注入します.これらの穴を利用して、ハッカーはユーザーの情報を盗むことができます.
通常、XSSは3つに分けられます.1.耐久型XSS 2.反射型XSS 3.DOM型XSSに基づく
なぜXSSは危険ですか?
ハッカーは通常あなたが知らないで、しかもあなたの許可する情況を通っていない下に、注ぎ込むJavaScriptコードは静かにあなたのユーザーのブラウザーで運行することができて、そしてあなたのユーザーの情報を盗んでいきます.これは非常に危険です.
xssはフロントエンドかバックエンドの問題だけですか?
これは先端と後端に関する問題です.
xssの例
XSSは通常、ユーザーが任意の文字を入力することを許可し、バックエンドに保存してから展示します.
例えば、あなたはブログを持っています.ユーザーにコメントを許可して、悪意のあるユーザーが悪意のあるコードを入力して注入します.他のユーザーが彼のコメントをロードする時、あなたが何の阻止措置もない時、悪意のコードは自動的に実行されます.例えば彼が入力しました
何が持久型XSSですか?
耐久型XSSは三つのXSSの一つです.これは上記のブログ記事の例で述べた内容です.
反射型XSSとは?
Reflected XSSは、エンドユーザにシナリオを含むリンクを提供することによって、サイト内の脆弱性を動的に利用する方法である.このように、攻撃者が提供するリンクは
典型的な例は検索フォームである.これは*/search URL*にあるかもしれません.GET term変数を使って検索語を受け入れることができます.
文字列を検索すると表示されるかもしれません.今、もしvalueをフィルタリングしないと、今問題が発生します.
迷惑メール/ネット釣りメールはこのようなXSS攻撃のよくあるメディアです.もちろん、サイトが大きければ大きいほど、ハッカーはハッキングを試みます.
DOM型XSSとは?
耐久性XSSを使用して、攻撃コードをサーバに送信してから、サーバー上でクリーンアップすることができます.反射したXSSに対しても同じです.
DOMベースのXSSは、悪意のあるコードがいつまでもサーバに送信されないXSSである.一般的に、これはURLの一部分を使用することによって、またはdocument.URL/document.location.hrefを参照することによって達成される.オンラインで発見されたいくつかの例は実際には機能しません.現代のブラウザは自動的にアドレスバーでJSを転送してくれます.彼らはあなたが義理立てをキャンセルした時だけ役立ちます.これはちょっと怖いです.(やめてください.)
これは簡単な動作例である.ページがあるとしたらhttp://127.0.0.1:8081/testxss.htmlラジオに乗る.クライアントのJavaScriptは、URLのセグメント内で渡されるテスト変数を確認します.http://127.0.0.1:8081/testxss.html#test=something#test=something値はサーバに送信されません.
ローカルのみです.耐久/反映のXSSは機能しません.しかし、スクリプトは以下のコマンドでこの値にアクセスします.
しかし、何らかの理由で変換document.URL値がキャンセルされたら、JavaScriptを実行する時に問題が発生します.どのJSもあなたのユーザブラウザで実行できます.
何か予防措置がありますか?
3つの方法があります.1.チェック2.コード3.CSP
html要素をページに追加する必要がある場合は、
ブラックリストまたはホワイトリストポリシーを使って検証できます.違いは、ブラックリストに入れることで、どのラベルを禁止するかを決められます.ホワイトリストを使って、どのラベルを許可するかを決められます.ホワイトリストのほうが安全です.ブラックリストは間違いやすいので、複雑で未来にも向かないです.
CSPはコンテンツセキュリティポリシーを表します.これはブラウザが実施する新しい標準です.セキュリティと信頼されたソースからJavaScriptコードを強制的に実行するだけで、コード内でのインラインJavaScriptの実行を禁止できます.例えば、上記XSSの利用を許可するJavaScriptタイプ.
Webサーバは、ページを提供する際にConteet Security-Paolicy HTTPヘッダを追加することにより、CSPを有効にします.
何がXSSですか?またの名はサイトを跨ぐシナリオの攻撃と言います.
私達はこのようにXSSを定義します.これはウェブサイトがユーザーの入力を安全に処理していないため、サイトが自分のユーザーを攻撃するメディアになる攻撃です.
通常、ハッカーは私達のウェブサイトの隙を利用して、JavaScriptを注入します.これらの穴を利用して、ハッカーはユーザーの情報を盗むことができます.
通常、XSSは3つに分けられます.1.耐久型XSS 2.反射型XSS 3.DOM型XSSに基づく
なぜXSSは危険ですか?
ハッカーは通常あなたが知らないで、しかもあなたの許可する情況を通っていない下に、注ぎ込むJavaScriptコードは静かにあなたのユーザーのブラウザーで運行することができて、そしてあなたのユーザーの情報を盗んでいきます.これは非常に危険です.
xssはフロントエンドかバックエンドの問題だけですか?
これは先端と後端に関する問題です.
xssの例
XSSは通常、ユーザーが任意の文字を入力することを許可し、バックエンドに保存してから展示します.
例えば、あなたはブログを持っています.ユーザーにコメントを許可して、悪意のあるユーザーが悪意のあるコードを入力して注入します.他のユーザーが彼のコメントをロードする時、あなたが何の阻止措置もない時、悪意のコードは自動的に実行されます.例えば彼が入力しました
alert('xss');
alertを使うのは、ここでは単なる例としてしか使われていないからです.何が持久型XSSですか?
耐久型XSSは三つのXSSの一つです.これは上記のブログ記事の例で述べた内容です.
反射型XSSとは?
Reflected XSSは、エンドユーザにシナリオを含むリンクを提供することによって、サイト内の脆弱性を動的に利用する方法である.このように、攻撃者が提供するリンクは
yoursite.com/?example=alert('test')
あなたのウェブサイトがexample GET変数を使って、ある操作を実行して、それをページに表示し、その値を確認してクリアしていない場合、このスクリプトはユーザのブラウザで実行されます.典型的な例は検索フォームである.これは*/search URL*にあるかもしれません.GET term変数を使って検索語を受け入れることができます.
文字列を検索すると表示されるかもしれません.今、もしvalueをフィルタリングしないと、今問題が発生します.
迷惑メール/ネット釣りメールはこのようなXSS攻撃のよくあるメディアです.もちろん、サイトが大きければ大きいほど、ハッカーはハッキングを試みます.
DOM型XSSとは?
耐久性XSSを使用して、攻撃コードをサーバに送信してから、サーバー上でクリーンアップすることができます.反射したXSSに対しても同じです.
DOMベースのXSSは、悪意のあるコードがいつまでもサーバに送信されないXSSである.一般的に、これはURLの一部分を使用することによって、またはdocument.URL/document.location.hrefを参照することによって達成される.オンラインで発見されたいくつかの例は実際には機能しません.現代のブラウザは自動的にアドレスバーでJSを転送してくれます.彼らはあなたが義理立てをキャンセルした時だけ役立ちます.これはちょっと怖いです.(やめてください.)
これは簡単な動作例である.ページがあるとしたらhttp://127.0.0.1:8081/testxss.htmlラジオに乗る.クライアントのJavaScriptは、URLのセグメント内で渡されるテスト変数を確認します.http://127.0.0.1:8081/testxss.html#test=something#test=something値はサーバに送信されません.
ローカルのみです.耐久/反映のXSSは機能しません.しかし、スクリプトは以下のコマンドでこの値にアクセスします.
const pos = document.URL.indexOf("test=") + 5;
const value = document.URL.substring(document.URL.indexOf("test=") + 5, document.URL.length)
それを直接ページに書きました.document.write(value)
このようにURLを呼び出す人がいるまで、すべていいです.http://127.0.0.1:8081/testxss.html#test= 現在、Dcument.URLを引用すると自動的に変換されますので、この場合は何も起こりません.あなたは得ることができます%3Cscript%3Ealert('x')%3C/script%3E
ページに印刷します.この値は転送されていますので、HTMLとは解釈されません.しかし、何らかの理由で変換document.URL値がキャンセルされたら、JavaScriptを実行する時に問題が発生します.どのJSもあなたのユーザブラウザで実行できます.
何か予防措置がありますか?
3つの方法があります.1.チェック2.コード3.CSP
html要素をページに追加する必要がある場合は、
document.querySelector('#myElement').textContent = theUserGeneratedInput
要素をページに新規作成するには、const el = document.createTextNode(theUserGeneratedInput)
要素の属性を設定したい場合は、document.querySelector('#myElement').setAttribute('attributeName', theUserGeneratedInput)
URLにパラメータを追加したいなら、使用してください.window.location.href = window.location.href + '?test=' + window.encodeURIComponent(theUserGeneratedInput)
通常、変換を使って入力をフィルタリングできない場合、通常は検証されます.よくある例はCMSであり、ユーザーがHTMLでページの内容を定義できるようにする.あなたは義理立てができませんブラックリストまたはホワイトリストポリシーを使って検証できます.違いは、ブラックリストに入れることで、どのラベルを禁止するかを決められます.ホワイトリストを使って、どのラベルを許可するかを決められます.ホワイトリストのほうが安全です.ブラックリストは間違いやすいので、複雑で未来にも向かないです.
CSPはコンテンツセキュリティポリシーを表します.これはブラウザが実施する新しい標準です.セキュリティと信頼されたソースからJavaScriptコードを強制的に実行するだけで、コード内でのインラインJavaScriptの実行を禁止できます.例えば、上記XSSの利用を許可するJavaScriptタイプ.
Webサーバは、ページを提供する際にConteet Security-Paolicy HTTPヘッダを追加することにより、CSPを有効にします.