webセキュリティXSS攻撃防止

3976 ワード

XSSフルネーム(Cross Site Scripting)クロスステーションスクリプト攻撃は、Webプログラムで最も一般的な脆弱性です.攻撃者がウェブページにクライアントのスクリプト(例えばJavaScript)を埋め込むことを指し、ユーザがこのウェブページを閲覧すると、スクリプトはユーザのブラウザで実行され、攻撃者の目的を達成する.
1.XSSはどのように発生しましたか?
1.紹介
  xss攻撃はサイドスクリプト攻撃であり、例えばフォームに実行可能なJavaScriptを含むコンテンツテキストを提出し、これらのスクリプトがサービス側にフィルタまたは転送されていない場合、これらのスクリプトはコンテンツを通じてページに投稿されています.この場合、他のユーザーがこのページに問い合わせたら、ブラウザはこれらのスクリプトを実行して攻撃されます.これにより、ユーザのクッキーなどの情報を取得する.
2.防御
  • は、敏感なクッキー情報に対して、HTTPOnlyを使用して、documentオブジェクトを使用してクッキーが見つからない.
  • は、ユーザが入力した情報を変換する
  • .
    2.CSRF攻撃
    1.紹介
      CSRF攻撃とは、駅をまたいで偽造を要求しています.例えば、明さんは銀行のAサイトを閲覧している間、銀行のウェブサイトを閉鎖していません.この時、明さんはCSRF攻撃を携帯するBサイトにアクセスしました.この時、Bサイトは銀行のサーバに対して振替要求を送り、明さんの銀行サイトのクッキー情報を携帯しています.パラメーターの上で明のアカウントの上のお金をBウェブサイトのすべての人のアカウントに回して、この時urlは返答を得て、明のお金はなくしました.
    2.防御
  • 敏感要求使用認証コード
  • は、HTTP Refererフィールドを検証する.RefererフィールドにはHTTP要求のソースアドレスが記録されています.銀行Aサイトからの要請にはAサイトのアドレスが付いています.CSRFアドレスからの要求にはBサイトのアドレスが携帯されます.私たちは敏感な要求ごとにReferer値を検証するだけで、Aサイトからのパスでなければいけません.しかし、このような安全をブラウザに託しています.完全に安全ではなく、いくつかのブラウザでは、Refererを改ざんしてCSRF攻撃を行うことができます.また、一部のユーザがRefererを無効にしている場合、サーバーはユーザの要求をずっと拒否しています.
  • は、要求アドレスにtokenを追加して検証する.ユーザ登録後、tokenが生成され、sessionに入れられ、要求毎にtokenをsessionから取り出し、パラメータとして要求を追加し、サーバにおいてブロックを確立してこのtokenを検証し、tokenが通過する.そうでなければ拒否する.しかし、この方法も安全問題があります.あるウェブサイトではユーザーのリンクをサポートしています.ハッカーはこのサイトで自分の個人サイトのアドレスを発表します.システムもこのアドレスの後にtokenを加えると、ハッカーは自分のウェブサイトでこのtokenパラメータを得ることができます.CSRF攻撃を開始します.
  • は、HTTPヘッダに属性tokenをカスタマイズして検証する.tokenをカスタム属性としてHTTPヘッダにセットし、XMLHTTPRequestをカプセル化することで、全ての要求にtoken属性を一括して加えることができる.このようにtokenはブラウザのアドレスに露出しません.
    3.SQL注入
    1.紹介
      SQLは攻撃を注入して、攻撃者はフォームを提出する時、フォームの上で関連しているsql文を記入して、システムはこれらのフィールドを普通の変数としてサービス側に送ってsqlクエリを行うと、攻撃者が記入したsqlはシステムのsql文に綴り込み、データベースのいくつかの操作を行います.
    例えば簡単な登録フォーム画面で
    Username: Password:
    この時システムで扱っているsql文はこうです.
    username:=r.Form.Get("username")
    password:=r.Form.Get("password")
    sql:="SELECT * FROM user WHERE username='"+username+"' AND password='"+password+"'"
    このとき攻撃者が入力したユーザ名は以下の通りです.パスワードが任意の値の場合は.
    myuser' or 'foo' = 'foo' --
    システムのSQL文はこうなります.
    SELECT * FROM user WHERE username='myuser' or 'foo' = 'foo' --'' AND password='xxx'
    攻撃者はログインに成功します.
    2.防御
  • フォームフィルタリング、フォーム提出の正当性を検証し、一部の特殊文字に対して変換処理
  • を行う.
  • データベース権限最小化
  • クエリ文はデータベースから提供されたパラメータ化クエリインターフェースを使用して、直接SQL
  • に接続しないでください.
    4.身分証と会話
    1.攻撃
     ハッカーはブラウザーの中でJSを停止して、クライアントの検査を防止して、それによっていくつかの操作を行います.
    2.防御
  • は敏感な情報を隠します.
  • 敏感情報を暗号化する
  • .
  • セッションが定期的に失効しました.
    5.権限とアクセス制御
    1.攻撃
      urlパラメータの修正によって、他人のページにアクセスできます.例えば、ハッカーは下記のリンクを使って、あるショッピングモールで自分の注文リンクを訪問することができます.
    https://***.***.com/normal/item.action?orderid=51338221644
    この時、もしウェブサイトに関連する権限がないなら、彼も下記のリンクを通じて他の人の注文を訪問することができます.
    https://***.***.com/normal/item.action?orderid=  id
    このようにすると、商店街の他の人のプライバシーが漏れてしまいます.
    2.防御
  • 権限システムを追加し、アクセス時には対応するチェック
  • を追加することができます.
    6.安全ではない暗号化メモリ
    1.防御
  • 暗号化記憶敏感情報
  • md 5で暗号化しない
  • 7.アップロードホール
    1.攻撃
      画像をアップロードする時、攻撃者は画像ではなくリモートで実行できるスクリプトをアップロードします.この時、侵入者はリモートでスクリプトを実行してサーバを攻撃します.
    2.防御
  • ファイルアップロードタイプを制限する
  • .第三者ファイルのホスティングなどを使う
  • .
    8.トランスポート層は暗号化されていません.
    1.防御
  • 安全なhttpsバージョンを使用する
  • 敏感情報https伝送
  • 非敏感情報はhttp伝送
  • を使用する.
    9.未検証のリダイレクトと転送
    1.攻撃
      フィッシングに使用するハッカーは、脆弱なURLの後にジャンプパラメータを追加し、ユーザーにリンクを送信して、ユーザーを誘導してクリックします.この時、ユーザーはリンクの一番前に熟知しているURLを見て、クリックして中に入ることができます.
    2.防御
  • ジャンプリストを追加します.
  • ジャンプ前に、ユーザが他の怪しいページに転送することをユーザに促す
  • .
    10.web Shell
    1.攻撃
      ハッカーはwinシステムの中で攻撃されるウェブサイトにabc.aspをアップロードします.jspファイルは、この時点でシステムがjspファイルとして認識し、サーバーに転送する場合、いくつかのシステム上でaspファイルとして認識されます.