クロスサイトリクエストフォージェリ(CSRF)
説明 :
基本的な考え方は、ユーザーをだまして、攻撃したCMSに対してブラウザがPOSTまたはGETリクエストを開始するページに誘導することです。
CMSを利用したサイト管理者のメールアドレスを知っていると想像してみてください。あなたがそれに欲しいものを何でも彼にいくつかの面白いウェブページに電子メールで送ってください。このページでは、CMSの管理パネルが新しい管理ユーザーを作成するために使用するデータを使用してフォームを作成します。これらのデータをWebサイトの管理パネルに送信すると、Webページのiframeが非表示になります。Voilà、あなたはあなた自身の管理者アカウントを作成しました。
それを防ぐ方法:
通常の方法は、すべてのフォームでランダムな短命(15分から1時間)のナンスを生成することです。CMSがフォームデータを受信すると、最初にナンスが正常かどうかをチェックします。そうでない場合、データは使用されません。
CMSの例:
詳しくは :
ウィキペディアのページとOWASPプロジェクト。
不正なパスワードの保存
説明 :
データベースがハッキングされ、ウィキリークスのようなものに公開されたと想像してみてください。ユーザーの大部分が多くのWebサイトで同じログインとパスワードを使用していることを知っているので、それらを簡単に取得できるようにしますか?
いいえ。データベースデータが公開された場合の被害を軽減する必要があります。
それを防ぐ方法:
- 最初のアイデアはそれらをハッシュすることです。レインボーテーブルがあるため、これは悪い考えです(たとえば、ハッシュがmd5ではなくsha512であっても)。
- 2番目のアイデア:ハッカーが各パスワードをブルートフォースする必要があるように、ハッシュする前に一意のランダムソルトを追加します。問題は、ハッカーが大量のハッシュを高速に計算できることです。
- したがって、現在のアイデアは、パスワードのハッシュを遅くすることです。頻繁に行うことはないので、気にしません。しかし、攻撃者は、1ミリ秒あたりに生成されるハッシュが1000から1になると、泣きます。
プロセスを簡単にするために、パスワードの第一人者によって開発されたライブラリphpassを使用できます。
CMSの例:
詳しくは :
phpassページ。
クロスサイトスクリプティング(XSS)
説明
これらの攻撃の目的は、正当なユーザーによって実行されるスクリプトをWebサイトに表示させることです。
これらには、永続的かどうかの2種類があります。最初のものは通常、ユーザーが保存できるものからのものであり、他のものは送信されたリクエストによって与えられたパラメーターに依存します。これは例ですが、永続的ではありません:
<?php
if(!is_numeric($_GET['id'])){
die('The id ('.$_GET['id'].') is not valid');
}
?>
これで、攻撃者は次のようなリンクを送信できます。http://www.example.com/vulnerable.php?id=<script>alert('XSS')</script>
それを防ぐ方法
クライアントに出力するすべてのものをフィルタリングする必要があります。ユーザーにhtmlを保存させたくない場合は、 htmlspecialcharsを使用するのが最も簡単な方法です。しかし、彼らにhtml(彼ら自身のhtmlまたはbbcodeのような他のものから生成されたもののいずれか)を出力させるとき、あなたは非常に注意しなければなりません。これは、imgタグの「onerror」イベントを使用した古い例です:vBulletin脆弱性。または、古いMyspaceのSamyがあります。
CMSの例:
詳しくは :
ウィキペディアとOWASPを確認できます。ha.ckersページにもたくさんのXSSベクターがあります。
メールヘッダーインジェクション
説明 :
\r\n
メールヘッダーはCRLF( )シーケンスで区切られます。一部のユーザーデータを使用してメールを送信すると(From:またはTo:に使用する場合など)、より多くのヘッダーを挿入できます。これにより、彼らはあなたのサーバーから匿名のメールを送ることができます。
それを防ぐ方法:
ヘッダー内のすべての、、、および文字を\n
フィルタリングし\r
ます。%0a
%0d
CMSの例:
詳しくは :
ウィキペディアはいつものように良いスタートです。
SQLインジェクション
説明 :
古い古典。これは、ユーザーからの直接入力を使用してSQLクエリを作成するときに発生します。この入力が必要に応じて作成されている場合、ユーザーは自分が望むことを正確に実行できます。
それを防ぐ方法:
単純。ユーザー入力を使用してSQLクエリを作成しないでください。パラメータ化されたクエリを使用します。たとえば、ファイルシステム、独自のデータベース、またはWebサービスからの入力など、ユーザー入力として自分でコーディングされていない入力を検討してください。
CMSの例:
詳しくは :
ウィキペディアとOWASPには、このテーマに関する非常に優れたページがあります。
Http応答の分割
説明 :
電子メールヘッダーと同様に、httpヘッダーはCLRFシーケンスで区切られます。アプリケーションがユーザー入力を使用してヘッダーを出力する場合、これを使用して独自のヘッダーを作成できます。
それを防ぐ方法:
メールの場合と同様に、ヘッダーの一部として使用する前に、ユーザー入力から、、、および文字をフィルタリング\n
します。ヘッダーをurlencodeすることもできます。\r
%0a
%0d
CMSの例:
詳しくは :
この種の攻撃に関する多くの情報がどこにあるかについて少し推測させてください。OWASPとウィキペディア。
セッションハイジャック
説明 :
これでは、攻撃者は別の正当な(そしてできれば認証された)ユーザーのセッションを使用したいと考えています。このために、彼は自分のセッションCookieを被害者のものと一致するように変更するか、被害者に自分の(攻撃者の)自分のセッションIDを使用させることができます。
それを防ぐ方法:
ここで完璧なものはありません:-攻撃者が被害者のCookieを盗んだ場合、ユーザーセッションがユーザーIPと一致することを確認できます。ただし、正当なユーザーがIPを頻繁に変更するプロキシを使用している場合、これによりサイトが役に立たなくなる可能性があります。-攻撃者がユーザーに自分のセッションIDを使用させる場合は、 session_regenerate_idを使用して、ユーザーの権限が変更されたときにユーザーのセッションIDを変更します(ログイン、ログアウト、Webサイトの管理者部分へのアクセスなど)。
CMSの例:
詳しくは :
主題に関するウィキペディアのページ。
他の
- ユーザーの実行:試行されたIPではなく、試行されたユーザー名を無効にすることでログイン試行のブルートフォーシングを防止すると、誰でも2分以内にすべてのユーザーをブロックできます。新しいパスワードを生成するときも同じです。ユーザーが新しいパスワードを確認するまで(たとえば、パスワードを使用してログインすることにより)、古いパスワードを無効にしないでください。
- ユーザー入力を使用してファイルシステムで何かを実行します。それがエイズと混合された癌であるかのようにこれをろ過してください。これは、ファイルでのincludeとrequireの使用に関係し、パスはユーザー入力から部分的に作成されます。
- eval、system、exec、またはこの種のあらゆるものをユーザー入力で使用します。
- WebにアクセスしたくないファイルをWebアクセス可能なディレクトリに入れないでください。
OWASPページで読むことができるものはたくさんあります。