ホームページ >バックエンド開発 >PHPチュートリアル >php_PHP チュートリアルでのセッション セキュリティの簡単な理解

php_PHP チュートリアルでのセッション セキュリティの簡単な理解

WBOY
WBOYオリジナル
2016-07-13 17:09:58959ブラウズ

セッション ID を取得する方法は数多くあります。攻撃者は平文通信を閲覧することでセッション ID を取得できるため、セッション ID を URL に含めたり、暗号化されていない接続を介して送信される Cookie に含めたりすることは危険です ( as _ get() パラメータとしてセッション ID を渡すことも安全ではありません)。URL はブラウザの履歴キャッシュに保存されており、簡単に読み取ることができるためです。 (暗号化通信にはsshの使用を検討してください)

主な安全対策としては以下の2点が挙げられます。

1. 攻撃者がユーザーのセッション ID を取得できないようにします。

セッション ID を取得する方法は数多くあります。攻撃者は平文通信を閲覧することでセッション ID を取得できるため、セッション ID を URL に含めたり、暗号化されていない接続を介して送信される Cookie に含めたりすることは危険です ( as _ get() パラメータとしてセッション ID を渡すことも安全ではありません)。URL はブラウザの履歴キャッシュに保存されており、簡単に読み取ることができるためです。 (暗号化通信にはsshの使用を検討してください)

さらに巧妙な攻撃方法もあります。攻撃者は、スクリプト攻撃によって侵害された Web サイトを通じて、侵害された Web サイトのユーザーを別の Web サイトにリダイレクトし、リダイレクトされた Web サイトの URL に次のコードを挿入します。 ?PHPSESSID=213456465412312365465412312;

最終的にWebアプリケーションに送信されました。ユーザーが Web アプリケーションを表示すると、PHP はこのセッション ID に関連付けられたデータがないことを確認し、データを作成します。ユーザーは何が起こったのか知りませんが、攻撃者はセッション ID を知っており、このセッション ID を使用してアプリケーションに侵入することができます。

この攻撃を防ぐには 2 つの方法があります。

(1) phptutorial.iniでsession.use_only_cookieがオンになっているか確認してください。この場合、PHP は URL ベースのセッション ID を拒否します。
(2) セッションを開始するときに、セッション データに変数を入れます。この変数は、セッション データにそのような変数が存在しないことが判明した場合、セッション ID が存在しないことを意味します。 false の場合、session_regenerate_id 関数を呼び出して、既存のセッションに新しいセッション ID を割り当てることができます。

例:

変数が存在するかどうかを判断して、セッション ID が true であるか false であるかを判断します。セッション ID が存在する場合は、session_regenerate_id() 関数を使用してセッション ID を変更し、新しいセッションを作成します。セッションID、

コードは次のとおりです:

コードをコピーします コードは次のとおりです:

セッション開始() ; if (!isset ( $_SESSION['shili1'] )) { //shili1 変数が設定されているかどうかを判断します
$old_id = session_id () //元のセッション ID の変数名
; session_regenerate_id () // 新しいセッション ID を取得します
$new_id = session_id () //新しいセッションIDの変数名
; echo "old : $old_id
//元のセッション ID を出力します ; echo "new : $new_id
// 新しいセッション ID を出力します ; $_SESSION['shili1'] = TRUE } ; ?>

実行結果は図に示すとおりです:

これは、この機能の理解を深め、応用するためにセッション ID を出力するだけの例ですが、プログラミングにおいてセッション ID を出力する必要はありません。
2. 攻撃者によるセッション ID の取得を制限します。

攻撃者によるセッションIDの取得を制限する方法は以下の通りです。

(1) 関数 (md5) を使用して、User-Agent ヘッダーと追加の文字列データのハッシュ値 (hash) を計算します。 (ハッシュ関数は、任意の大きなデータセットを受け取り、それを非常に異なる見た目のデータセットに変換します。結果として得られるハッシュ値は完全に再現不可能であり、別の入力から生成することも不可能です)

ユーザー エージェント文字列の後にデータを追加すると、攻撃者は一般的なエージェント値の md5 エンコードを計算してユーザー エージェント文字列をテストできなくなります。

(2) このエンコードされた文字列をユーザーのセッションデータに保存します。
(3) このユーザーからリクエストを受信するたびに、このハッシュ値を確認します。

このソリューションのコードは次のとおりです:

コードをコピーします コードは次のとおりです:


定義 ('ua_seed','webapp') ; セッション開始() ; if ( !isset($_SESSION['user_agent'] )){

$_SESSION['user_agent'] = md5 ( $_SERVER['HTTP_USER_AGENT'].ua_seed ); }その他{
if ($_SESSION['user_agent'] != md5($_SERVER['HTTP_USER_AGENT'].ua_seed)){} }

?>

攻撃者に迷惑をかけることで、攻撃者がセッションIDを取得しても破壊できなくなり、システムへの被害を軽減できます




http://www.bkjia.com/PHPjc/629702.html
www.bkjia.com

本当

http://www.bkjia.com/PHPjc/629702.html

攻撃者がセッション ID を取得するには、クリア テキスト通信を参照する方法が多数あるため、暗号化されていない接続を介して送信される URL または Cookie にセッション ID を含めるのは非常に危険です。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。