記事のディレクトリ
本稿では、「大規模なWebサイトの技術フレームワーク:コア・プリンシプルやケーススタディ、」から参照ブック第八章や他のオンラインの記事は、任意の漏れや間違いならば、私たちと尖ったを許します。ありがとうございます!
この世界は絶対的な自由がないのと同様に、絶対的なセキュリティはありません。サイトの相対的な安全性を達成するために、閾値を上げることによって攻撃されます。限られた利益を得るために、攻撃者が良いよりも害をもたらし、より高い価格を支払わなければならない可能にするには、近づきません。
- 「大規模なWebサイトの技術フレームワーク:コア・プリンシプルとケーススタディ」
A .Webの攻撃手法
1.DDos攻撃
DDoS攻撃は、この技術のコアを攻撃、中国はサービス攻撃の分散拒否と呼ばれる攻撃対象サーバに多数の要求を偽造送信するための分散サーバーを使用することで、ターゲットサーバは、大量の情報が殺到している返信するために必要な、ネットワーク帯域幅やシステムリソースを消費し、通常の麻痺や停止がネットワークサービスを提供することをシステムまたはネットワークの過負荷につながります。
DDoS攻撃の影響を防ぐために、一般的に次の措置をとります。
- システムバックアップ
- IP特定のリクエストインターセプタ(nginxの)
- 帯域幅を増やします
- 複数のサーバー間で要求のロード・バランシング
2.XSS攻撃
クロスサイトスクリプティング(XSS)、それはコードインジェクションの攻撃で、XSSと呼ばれます。先のサイト上で悪意のあるスクリプトを注入する攻撃者が、それがユーザーのブラウザ上で実行します。これらの悪質なスクリプトを使用すると、攻撃者は、このようなその他のCookie、セッションID、など、ユーザー、ひいては危険にさらすデータセキュリティに関する機密情報を入手することができます。
検索ページを想像して、URLパラメータの内容に基づいてキーワードを決定します。コードは以下の通りであります:
<input type="text" value="<%= getParameter("keyword") %>">
<button>搜索</button>
<div>
您搜索的关键词是:<%= getParameter("keyword") %>
</div>
このとき、キーワード設定されている場合"><script>alert('XSS');</script>
、
HTTPのGetリクエストをサーバに次の送信されます。
http://xxx/search?keyword="><script>alert('XSS');</script>
次回にこのキーワードを取得すると、ブラウザがします"><script>alert('XSS');</script>
HTMLページへのパラメータとしての応答を入力します。
<input type="text" value=""><script>alert('XSS');</script>">
<button>搜索</button>
<div>
您搜索的关键词是:"><script>alert('XSS');</script>
</div>
ブラウザは区別することができない<script>alert('XSS');</script>
、悪意のあるコード、したがって、その実行。ユーザーのブラウザに出力XSSの言葉。
これは一般的に、XSS攻撃は、以下の2つのカテゴリに分けることができ、XSS攻撃の典型的な例です。
1.耐久性のある攻撃
ハッカーXSSスクリプトがブラウザに表示する場合、次に、上記の例のように、取り出した、このような攻撃は、多くの場合、ウェブブログやフォーラムに表示され、攻撃されるためにサーバーに送信されます。
2.反射型攻撃
反射型XSS悪意のあるスクリプトがURLに存在します。
ジャンプなどでは、そのようなサイトの検索など、URLからパラメータを渡す機能における反射XSS脆弱性が一般的。
主導権を有効にするには、悪意のあるURLを開くようにユーザーを必要とするので、攻撃者は多くの場合、クリックするようユーザーを誘導するために様々な手段を結合します。URLは、悪意のあるスクリプトを取得し、実行のためにサーバにレンダリングされます。
XSS攻撃のために、予防措置は何カテゴリは次のとおりです。
1.入力フィルタ
入力パラメータをフィルタリング行わ前端と後端、例えば<...ようなパラメータ<と>エスケープします。
2.純粋なフロントエンドレンダリング
純粋なフロントエンドのレンダリングでは、我々は、明示的にブラウザを教えてくれます:以下の内容がセットテキスト(.innerText)、またはプロパティ(.setAttribute)、またはようにスタイル(.style)となることです。ブラウザを容易に予想されるのコード外を実行する、だまされないであろう。
3.SQLインジェクション攻撃
SQLインジェクション攻撃は、Web攻撃の最も一般的なタイプであり、防ぐことはできません場合、それは外部のサービスにつながることができるようにデータベース全体の崩壊につながる可能性があります。
SQLインジェクションの簡単な例:パスワードを無視して
のみログインし、ランディングページのフロントエンドと仮定するusername
と、password
バックエンドがSQL文を訪問することができますかどうかを判断するために、:
select count(*) from user_table where username = ? and password = ?
クエリが記録されている場合、我々は、入力ユーザー名とパスワードを見れば、そのユーザーのアカウントとパスワードは、正しいですが、ということ:
username = 'ARong';#
password = 'SQL注入'
そして、バックエンドが受け取るスプライシングパラメータは、次のSQLになります
select count(*) from user_table where username = 'ARong';# and password = 'SQL注入'
図から分かるように、パスワードの条件このSQL文は、本質的に限り、あなたは成功を訪問することができ、このユーザ名があるとして、コメントアウトされています。
あなたはユーザーテーブルの名前を知っている場合(たとえば、エラーメッセージのプロンプトの一部)は、条件の一部が変更されGenghen:
username = 'ARong';drop table user_table;#
password = 'SQL注入'
したがって、このSQLを中にスプライシングされます。
select count(*) from user_table where username = 'ARong';drop table user_table;# and password = 'SQL注入'
これは、ユーザのテーブル構造になり、データは削除されます!バックアップは、DDL文自体は声明で、ログが記録されませんので、ライン上に復元することはできませんドロップし、存在しない場合、最も恐ろしい事は、あります。
SQLインジェクション攻撃を防止する方法は、そこに教育と研究とパッケージパラメータのJDBC PreparedStatementクラスなどのパラメータを、前処理行うことです、MyBatisのもで交換するために使用することができる前処理回避のSQLインジェクションを達成するために#$ {} {}、あなたは前処理を使用した場合の効果は、その後、SQL以上になるだろう:
select count(*) from user_table where username = "'ARong';drop table user_table;#" and password = "'SQL注入'";
パラメータのSQLパラメータの両端の引用符は、SQL文の一部になって回避することができところで。
4.CSRF攻撃
CSRF(クロスサイトリクエストフォージェリ)、中国名:クロスサイトリクエストフォージェリは、とも呼ばれる:ワンクリック攻撃/セッション乗馬、略し:CSRF / XSRF。
CSRF攻撃の核となるアイデアは、悪質なリクエストを送信するためにあなたの名前で、あなたのアイデンティティ(クッキーとセッションを)盗むために。
1.フィールドを確認してHTTPリファラー
HTTPプロトコルに従って、リファラーHTTPヘッダと呼ばれるフィールドがあり、それは、HTTPリクエストの送信元アドレスを記録します。通常の状況下では、同じサイトからのセキュリティ制限されたページにアクセスするための要求。
追加2.トークンのリクエスト
クッキーとセッションを多重化することにより、CSRF攻撃はリクエストの目的を達成するために偽造ので、各トークンを要求することができる追加、およびトークンの要求を受信するための後端部には、実際にクライアントからの要求ことを保証するために検証し、されていますこれはまた、CSRF攻撃を防ぐことができます。
3.コード
キー操作では、ユーザは、偽の要求が自動的に送信された回避、検証コードを送信するために認証要求を通過する必要があります。
2.情報の暗号化技術
1.一方向暗号ハッシュ
これは、同じ長さの出力を得るために、ハッシュ計算によって一方向ハッシュ暗号化情報異なる長さを指します。
一方向ハッシュ関数ので、暗号化され、同じデータに対して同じデータを生成することが、データによって生成された元のデータが暗号化されて元に戻すことはできません。
この技術の暗号化アルゴリズムのアプリケーションは、MD5とSHAがあります。
暗号化技術を使用して一方向ハッシュでは、元のデータがある場合でもマイナーな変更が大きな違い、暗号化によって生成された暗号化されたデータになりますと、一方向ハッシュとして情報が決定されるダイジェスト。
一方向暗号化ハッシュ不可逆的です、多くの場合、ユーザのパスワード、パスワードやその他の機密データバンクカードを暗号化するために使用することができ、それが暗号文を生成するために、逆にすることはできません。、データは、一方向ハッシュ暗号化と同じことを行うための入力が可能で、ユーザのログは、あなたがユーザーの入力を比較することで知ることができる場合は正しいです。これは非常に重要な理由は、データ侵害が発生し、またこれらのプライベートデータが露出するかどうかということであるにもなりました。
一方向ハッシュ暗号化技術が完全に不可逆的ではないことに注意してください。大量のデータ] [虹のテーブルを構築することができる収集および分析することにより、元のデータは、虹のテーブルに対応する比較的単純な暗号文を取得することができます。
2.対称暗号化
いわゆる対称暗号化は、同じキーで暗号化および復号化データを参照してもよいです。
対称暗号化は、高い効率の暗号化と復号化に大量のデータの暗号化と復号化に使用するのに適した有利です。欠点は、漏洩した場合、そのデータ全くプライバシーがありませんすべて同じキー、キーが漏洩や盗難が最優先の暗号化と復号化であることを確実にする方法ではなく、キーです。
一般的な対称暗号化アルゴリズムAES、DESなど。
必要に応じてデータの暗号化は、一般的に対称暗号化を使用することができます。
3.非対称暗号化
非対称暗号化機能は、外の世界に開かは、公開鍵と所有者のみが、秘密鍵として知られていることを他のキーと呼ばれる暗号化と復号化の使用に異なる鍵、です。
唯一の秘密鍵で暗号化されたデータのロックを解除することができ、公開鍵は、秘密鍵は公開鍵データにより暗号化されているだけで解決することができます。そして、外の世界は、鍵、公開鍵を把握することができません、または他の全体の暗号化プロセスは無意味です。
非対称暗号の暗号化及び復号化効率が低下するが、別個の公開鍵と秘密鍵ので、セキュリティが(キーが送信されるような)プライベートデータ少量の安全な伝送に適した、より高いであろう。
2つのシナリオ非対称暗号化を使用します:
1.クライアント情報は、サーバーのセキュリティに送信します:
サーバーのデータ送信にクライアント、データの暗号化は、サーバーがデータを復号化する秘密鍵を使用して、データを受信した公開鍵を、使用している場合。データが送信中に傍受されているにもかかわらず、だけでなく、元のデータを得ることができない何の秘密鍵が存在しないため。
2.サーバーは、クライアントにデジタル署名を送信します
そう、データがそれを解読することができ、公開鍵を使用して、否認防止、偽造クライアントであるように、そこに一つだけの秘密鍵であり、他は知られていないため、クライアントは、暗号化された個人データを介してサーバに送信すると彼は、署名の役割を担っています。
一般的に使用される非対称暗号化アルゴリズムはRSAアルゴリズムです。
4.キー管理
鍵管理のアプローチは、付着を防止することであるとき、それは一方向ハッシュ暗号化、対称暗号化または非対称暗号化、利用盗まれたキーの時に暗号化と復号化のためであるかどうか、そして、暗号化プロセスは、完全に無効になりますキーが盗まれました。
低いレベルから次のキー管理は先輩に昇進し、セキュリティを強化します:
1.プログラムコードにハードキー
これは最も一般的で最も危険な慣行である、一度ソースファイルを取得し、キーは、道路を取得します。キーを交換するとき、ハードコーディングされたコードを変更する必要があります。
設定ファイルからキーを入手2.
このアプローチのセキュリティは非常に低いですが、プロファイルに関して、ハードコードされている交換用のキーを容易にするために使用することができます。
3.キーは特別なサーバーに個別に保存されています
このアプローチは、大幅キーのセキュリティを向上させることができ、キーは、特定のサーバー上に保存され、サーバはあなたが主に鍵が盗まれた問題を回避できるように、特定のサーバのサービスへの鍵のアクセスを提供します。
4.暗号化されたストレージ・キーフラグメント
キーは、サーバに格納されている、またはハッカーが存在してもよい直接符号サーバを取得し、その後、タイム・スライスがキーであってもよく、それぞれが別々に暗号化され、異なるデータベースまたはファイルシステムに格納され、とき全てのキーを取得するための鍵のニーズは完全なキーを形成するために、スライスを取得し、特定の暗号化プロセスを経ています。
5.暗号化技術の使用HTTPS
プロセスHTTPS要求は、次の図のような様々な暗号化技術が含まれています。
- クライアントがサーバーにHTTPSリクエストを起こります
- サーバー(デジタル証明書を設定している)クライアントに第1の公開鍵証明書を返します。
- 無効なポッププロンプト危険な場合、クライアントは、など、有効期限を表示することは有効である、SSL / TLS公開鍵証明書の解析を使用しています
- クライアントがサーバに暗号文の文字列の背面に公開鍵と非対称暗号化して、ランダムな値を生成し、
Key = 公钥 【非对称加密】 随机值 = 私钥 【解密】 随机值
- 暗号文を解読するキー非対称秘密鍵を介してサーバにランダムな値を取得した後
- その後、サーバーは、ランダムな対称暗号鍵、暗号化されたデータ伝送としてこの値を使用しています
随机值 【对称加密】报文 = 随机值 【对称解密】密文
- 暗号化されたデータを受信した後に、対称的なランダムな値を使用してデータを復号化します
HTTPS非対称暗号化を使用してランダム値を一緒に対称暗号化キーとして使用されるように、ランダム値が、なぜなら、対称暗号化のより高い性能をその後、盗まれないことを保証する、セキュリティのランダムな値を[]を保証することです。
III。情報フィルタリング技術
1.テキスト一致
テキストマッチングは、2つの実装は、通常はありますが、最も一般的な情報フィルタリング技術です。
1.ダブル配列TrieTree
TrieTreeこのデータ構造は、天然の文字列マッチングの特性を有しているため、大幅に一致する文字列の効率を向上させることができ、それは、典型的には、テキスト・プレフィックスツリーまたはプレフィックスツリーは配列ビス行うテキストベースのマッチング数と一致します。
2.多段ハッシュテーブルは
空間が複数の二重アレイTrieTreeより多くによって占められるように、マルチレベルのハッシュテーブルので、ツリーをフィルタリングする多段ハッシュテーブル少ないマッチングキーワードを構築するために使用されてもよいです。
2.分類アルゴリズム
など、ポスティングポルノ、暴力、中のユーザ発話の問題など、少量のデータについては、そのような状況の下で手でスクリーニングすることができます。そのような数十のメッセージ数百万のように大量のデータが、心の中で毎日を送っている場合しかし、どのようにスクリーニングん、まだスパムメッセージを傍受。
この方法で培養分類アルゴリズムは、自動分類アルゴリズムが一致してブロックスパムを完了できるようにする機械学習を、使用することです。
今一般的に使用される分類アルゴリズムは、ベイズ分類アルゴリズムです。古典的な問題を解決することができますベイズアルゴリズム自体は確率の最初のボックスから赤いボールと白のボール、白ボールの2つのボックスから、このようなアウト白いボールのように確率条件付き確率の問題は、どのくらいあるのですか?
最初のボックスからボールの確率はP(A)であることを条件とするベイズ式は、その後確率はとして表すことができる,,ホワイトボール球はP(B)である確率です。
P(A | B)= P(A-B)/ P(B)= P(A)* P(B | A)/ P(AB)
だから、ベイズ分類アルゴリズムに基づいてスパムの条件を満たすように確率論の観点からスクリーニングすることができるが、いくつかの偽陽性があるでしょう。
3.ブラックリスト
ユーザーはすでに訴えについては、我々はブラックリスト、メモリ内の次のメッセージは、私たちが傍受することができ、そのIPアドレスまたはアカウント名のないユーザーののIPアドレスにすることができます。
ブラックリストは、ハッシュテーブルを使用して実装されますが、あまりにも多くのIPアドレスは、例えば、そこに10億個のIPアドレスがあるブラックリストに置く必要があるとき、そして、このことを多くのスペースを取るだろうハッシュテーブルを使用して、ハッシュ衝突を大量に生産することができますアプローチは、ブルームフィルタデータブラックリストを格納するために使用される場合、それは非常に空間の使用を低減することができます。しかし、注目すべきこと、偽陽性の割合を変更します基礎となる配列ブルームフィルタの大きさの変化、と。ブルームフィルタは、正確にこのケース[不在]、[プレゼンス]を決定し、この場合の偽決意することであることができます。