ホームページ  >  記事  >  バックエンド開発  >  PHPセッションのセキュリティ分析_PHPチュートリアル

PHPセッションのセキュリティ分析_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:24:261527ブラウズ

これにより、利便性と速度の目的は達成されますが、情報を保存する際には、銀行口座番号、クレジット カード取引、ファイル記録など、攻撃の対象となる可能性のある機密情報が含まれることがよくあります。そのため、攻撃が成功する可能性を減らすために、コードを作成するときにセキュリティ対策を講じる必要があります。

主な安全対策には以下の2つの側面が含まれます。

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

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

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

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

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

例:

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

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

コードは次のとおりです。
< ?php
session_start ()
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 を出力する必要はありません。
PHPセッションのセキュリティ分析_PHPチュートリアル2. 攻撃者によるセッション ID の取得を制限します。

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

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

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

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



コードをコピーします
コードは次のとおりです: define ( 'ua_seed','webapp' ) ; if ( !isset($ _SESSION['user_agent'] )){
$_SESSION['user_agent'] = md5 ( $_SERVER['HTTP_USER_AGENT'].ua_seed );
}else{
if ($_SESSION['user_agent'] ] != md5($ _SERVER['HTTP_USER_AGENT'].ua_seed)){} }
?>
攻撃者に迷惑をかけることで、攻撃者がセッションIDを取得しても破壊できなくなり、システムへの被害を軽減できます。

www.bkjia.com本当http://www.bkjia.com/PHPjc/324283.html技術記事これにより、利便性と速度の目的は達成されますが、情報を保存する場合、銀行口座番号やクレジット カード情報など、攻撃の対象となる可能性のある機密情報が含まれることがよくあります...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。