設定されたCookieを使用してPHPを使用してデータベース駆動型のWebサイトを作成しましたが、HTTPスプーフィングを防止する必要があります。これを行う方法について何かアイデアはありますか?私たちはこれの初心者なので、どんな助けでも素晴らしいでしょう
5 に答える
HTTPリクエストを「スプーフィング」することはできません。サーバーにリクエストを送信すると、サーバーは適切に応答します。
あなたが防ごうとしているのはクッキーのなりすましだと思います。Cookieはクライアント側に保存されることを考えると、ユーザーがコンテンツを変更できないようにするためにできることは何もありません。
機密情報をCookieに保存しないでください。それらは安全ではなく、クライアントによって簡単に読み取られ、変更されます。
代わりにPHPセッションを使用してください。セッションがどのように機能し、それらを安全に保つ方法についての完全な説明は、私の以前の回答の1つで読むことができます。
基本的に、セッションの保護は2つの面で行われます。
セッション固定の防止攻撃者がIDを盗む必要がある時間を短縮するために、X個ごと
に新しいリクエストを再生成します。session_id
クライアント
を一意に識別するIPまたはUser-Agent、あるいはその両方を使用してクライアントを一意に識別し、ページが読み込まれるたびにその値をセッションに保存されている値と照合します。これは、クライアントを一意に識別するために必要な2つの選択肢だけです。
それが整っていても、誰にでもできる解決策はありませんsession_id
。妥協すれば、ほぼ完了です。
繰り返しになりますが、詳細な説明については、私の以前の回答を参照してください。
何のなりすまし?HTTPはデータを転送するための単なるプロトコルであり、実際にはそれ自体が偽装されるものではありません。
やるべきことは、情報のなりすましを防ぐことではなく、単にクライアントを決して信頼しないことです。Cookieに関しては、Cookieデータを受け入れる前に、データベースと比較するハッシュ化された疑似乱数値を保存します。
更新しました:
特に気になるのはCookieなので、もう少し詳しく説明します。クッキーを保存する際に気をつけなければならない主なことが2つあります。
- 実際のデータを保存しないでください
- データベースに対して検証する
したがって、個人データを保存するユーザーがいるサイトが必要だとします。Cookieには、ユーザー名またはユーザーIDと、ユーザーがログインしたときにデータベースにも保存されるハッシュ化されたセキュリティトークンを保存できます。セキュリティトークンは認識されないため、ログインするたびに変更されます。個人情報はデータベースに残り、Cookieには残りません。
ベストプラクティスに関するその他の資料:http: //jaspan.com/improved_persistent_login_cookie_best_practice
なりすまし?IDが侵害された場合の唯一の本当の問題は、Cookieの盗難です。
あなたができることは、CookieがHTTPヘッダーを介して送信されるときはいつでも、それが発行されたIPアドレスに対してこれをチェックすることです。例えば:
<?php
session_start();
$rec = db_query('select count(*), ip from session where session_id = "' . session_id() . '"');
list ($last_count, $last_ip) = $rec[0];
if (! $last_count) {
# add it into the database
db_query('insert into session (session_id, ip) values (' .
'"' . session_id() . '", ' .
'"' . $_SERVER['REMOTE_ADDR'] . '"' .
')');
} else {
if ($last_ip != $_SERVER['REMOTE_ADDR']) {
print "user has stolen a cookie!";
}
}
?>
ただし、これは、ISPが動的IPアドレスを発行する人々に悪影響を与える可能性があります。
私はこれが答えられたことを知っていますが、私が使用する別のテクニックを追加したいと思います。それは管理ログインに特に役立ちます。通常どおりセッションを使用しますが、ディレクトリ保護をミックスに追加します。
そうすれば、セッションがハイジャックされた場合、ハイジャック犯はディレクトリログインも取得できる必要があります。
私はこのテクニックをフォーラムの管理に使用しています。特定のフォーラムはすぐにハッキングされ、これによりハッカーが侵入して深刻な問題を引き起こす可能性が低くなります。
DC