XSSとCSRFの浅い分析
3746 ワード
XSSとCSRFの浅い分析
Webセキュリティの面では、XSSとCSRFは昔話といえるでしょう.
XSS
XSS、すなわちcross site script、クロススタンドスクリプト攻撃、略称はもともとCSSであったが、カスケードスタイルシート(Cascading Style Sheet)と区別するためにXSSに変更された.
XSS攻撃とは、攻撃者がウェブサイトに悪意のあるスクリプトを注入し、ユーザーがウェブページを閲覧して使用する際に悪意のある操作を行うことであり、注入スクリプトにはJavaScriptのほかにCSS、HTMLなどがある.
XSS攻撃は,反射型(非持続型),記憶型(持続型),DOM型の3種類に分けられる.
はんしゃがた
反射型のXSS攻撃方式は,攻撃者が悪意のあるリンクをクリックしたりフォームを提出したりする操作をユーザに誘導し,スクリプト注入の目的を達成するのが一般的である.
例えば、あるページが検索キーワードをHTMLページに直接接続して表示するとします.
:
ユーザが検索をクリックすると、このような要求
http://example/search?keyword=xxx
がサービス側に送信され、サービス側はkeywordの後ろの文字をHTML接合して戻る.このとき、ユーザが悪意のあるリンク
http://example/search?keyword=xss
をクリックすると、返されるHTMLは次のようになります. :xss
ブラウザはscript内のxss攻撃スクリプトを実行し、攻撃者の攻撃目的を達成します.
きおくがた
ストレージ型のXSS攻撃は、攻撃者が悪意のあるコードを入力したデータとしてサービス側に提出し、サービス側がデータベース内に格納するのが一般的であり、ユーザーがこのデータを要求した後、サービス側が返したデータは悪意のあるコードであり、XSS攻撃が発生する.
よくあるのは、フォーラムに投稿したり、コメントしたりして、悪意のあるコードを注入したりして、ユーザーが投稿をクリックすると、攻撃を受けます.
DOMタイプ
DOM型のXSS攻撃は、攻撃者が悪意のあるスクリプトを注入した後、ページ要素を修正し、DOMのデータを取得して攻撃操作を実行するのが一般的です.例えば,ユーザのログインフォームの抽出を攻撃者のサービス側に交換し,ユーザのログイン情報を取得する.
防犯XSS
コンテンツセキュリティポリシーの構成は、Content-security-Policy HTTPヘッダをページに追加し、ユーザーエージェント(ブラウザなど)がページに対してどのリソースを取得できるかを制御するために、適切な値を構成することに関連します.たとえば、ファイルをアップロードしたり、ピクチャページを表示したりすることができます.ピクチャはどこからでも許可されますが、フォームのactionプロパティを制限するには、指定したエンドポイントにのみ値を割り当てることができます.適切に設計されたコンテンツセキュリティポリシーは、クロスステーションスクリプトからページを効果的に保護することができるはずです.(MDN)
const HTML_DECODE = {
'
': '
',
'<' : '',
'&' : '&',
'"': '"',
' ': ' ',
'"': '\'
// more code
};
CSRF
CSRF、すなわちcross site request forgeryは、クロスステーション要求偽造であり、再生攻撃と理解できる.よくあるのは、攻撃者がユーザーに釣りサイトを開いて操作するように誘導することです.
一例を挙げて説明すると、あるユーザが
www.a.com
サイトにログインし、ログインしていない場合に釣りサイトwww.b.com
を開き、釣りサイトに悪意のあるスクリプトがあり、開かれたときにCookie情報を持ってwww.a.com
にドメイン間リクエストを送信したとする.CSRFの特徴
CSRF防犯
再生攻撃については,実はフロントエンドでは処理できないが,主にバックエンドに頼っている.
let xhr = new XMLHttpRequest();
let token = sessionStorage.getItem('csrfToken');
xhr.setRequestHeader('CSRF-Token', token);
ただし、tokenはサービス側に格納され、tokenの読み取り、検証が必要であることに注意してください.