ホームページ バックエンド開発 PHPチュートリアル PHPの脆弱性徹底解説(7) - セッションハイジャック

PHPの脆弱性徹底解説(7) - セッションハイジャック

Dec 22, 2016 am 09:41 AM

サーバーとクライアントはセッションを通じて通信します。クライアントのブラウザがサーバーに接続すると、サーバーはユーザーのセッションを確立します。各ユーザーのセッションは独立しており、サーバーによって維持されます。各ユーザーのセッションは、セッション ID と呼ばれる一意の文字列によって識別されます。ユーザーがリクエストを行うと、送信される http ヘッダーにはセッション ID の値が含まれます。サーバーは http ヘッダーのセッション ID を使用して、どのユーザーがリクエストを送信したかを識別します。

セッションは各ユーザーの個人データを保存します。一般的な Web アプリケーションは、認証されたユーザー アカウントとパスワードを保存するためにセッションを使用します。異なる Web ページを変換するときにユーザーの身元を確認する必要がある場合は、セッションに保存されたアカウント番号とパスワードを使用して比較します。セッションのライフサイクルは、ユーザーがサーバーに接続したときに開始され、ユーザーがブラウザを閉じるかログアウトして session_destroy 関数がセッション データを削除したときに終了します。ユーザーが 20 分以内にコンピューターを使用しない場合、セッションは自動的に終了します。

セッションを処理するための PHP アプリケーション アーキテクチャ

PHPの脆弱性徹底解説(7) - セッションハイジャック

セッション ハイジャック

セッション ハイジャックとは、攻撃者がさまざまな手段を使用してターゲット ユーザーのセッション ID を取得することを指します。セッション ID を取得すると、攻撃者はターゲット ユーザーの ID を使用して Web サイトにログインし、ターゲット ユーザーの操作権限を取得することができます。

攻撃者がターゲットユーザーのセッションIDを取得する方法:

1) ブルートフォースクラッキング: クラックされるまでさまざまなセッションIDを試します。

2) 計算: セッション ID が非ランダムな方法で生成された場合、それを計算することが可能です

3) 盗用: ネットワーク傍受、XSS 攻撃、その他の方法を使用して

セッション ハイジャック攻撃手順

PHPの脆弱性徹底解説(7) - セッションハイジャック

インスタンス

//login.php 		
			
			
session_start(); 				
if (isset($_POST["login"])) 					
{ 				
$link = mysql_connect("localhost", "root", "root") 							
or die("无法建立MySQL数据库连接:" . mysql_error()); 								
mysql_select_db("cms") or die("无法选择MySQL数据库"); 									
if (!get_magic_quotes_gpc()) 										
{ 											
$query = "select * from member where username=’" . addslashes($_POST["username"]) . 												
"’ and password=’" . addslashes($_POST["password"]) . "’"; 													
} 														
else 															
{ 																
$query = "select * from member where username=’" . $_POST["username"] . 																	
"’ and password=’" . $_POST["password"] . "’"; 																		
} 																			
$result = mysql_query($query) 	
	
or die("执行MySQL查询语句失败:" . mysql_error()); 																					
$match_count = mysql_num_rows($result); 																						
if ($match_count) 																							
{ 										
$_SESSION["book"] = 1; 																											
mysql_close($link); 																									
header("Location: http://localhost/index.php?user=" . $_POST["username"]); 																															
}	
…..
	// 打开Session 																																				
		
			
	访客的 Session ID 是:echo session_id(); ?> 																																						
																							
																					
																	
															
																					
															
ログイン後にコピー

PHPの脆弱性徹底解説(7) - セッションハイジャック

ログイン後、

PHPの脆弱性徹底解説(7) - セッションハイジャック

攻撃開始




// Attack.php
php
//セッションを開く
();
エコー「セッション」ターゲット ユーザーの ID は次のとおりです。 "
";
echo "ターゲット ユーザーのユーザー名は次のとおりです。"
";
echo "対象ユーザーのパスワードは次のとおりです: " . $_SESSION["password"] . "
";
// 冊数を 2000 に設定します
$_SESSION["book "] = 2000;
?>


Submit http://localhost/攻撃.php?PHPSESSID=5a6kqe7cufhstuhcmhgr9nsg45 このIDは取得した顧客セッションIDです。顧客ページ更新後

PHPの脆弱性徹底解説(7) - セッションハイジャック

セッション固定攻撃

ハッカーは、攻撃を完了するためにセッション ID をユーザーに送信する方法を使用できます

http://localhost/index.php?user=dodo&PHPSESSID=1234 このリンクを表示するためにユーザー dodo に送信します

PHPの脆弱性徹底解説(7) - セッションハイジャック


その後、攻撃者は http://localhost/ Attack.php ?PHPSESSID=1234 にアクセスし、顧客ページが更新されて


が見つかりました。

PHPの脆弱性徹底解説(7) - セッションハイジャック

予防方法

1) セッションIDを定期的に変更する

関数 bool session_regenerate_id([bool delete_old_session])

delete_old_session trueの場合、古いセッションファイルが削除されます。 falseの場合、古いセッションが削除されます。デフォルトは false です。

Add


session_start();

session_regenerate_id(TRUE);

...

これにより、リロードされるたびに新しいセッション ID が生成されます。 2) セッションの名前の変更

セッションのデフォルト名は PHPSESSID です。ハッカーがパケットをキャプチャして分析しない場合、名前を推測して一部の攻撃をブロックすることはできません。

session_start();

session_name( "mysessionid");

...

3) 透過的なセッション ID をオフにする

透過的なセッション ID とは、ブラウザーの http リクエストで Cookie を使用しないことを意味します。セッション ID を作成し、セッション ID はリンクを使用して渡されます。php .ini を開き、コード内で

session.use_trans_sid = 0

を編集します

int_set("session.use_trans_sid", 0);

session_start();

...

4) Cookie ID からのみセッションを確認します

session.use_cookies = 1 はセッション ID を保存するために Cookie を使用することを意味します

session.use_only_cookies = 1 はセッション ID を保存するためにのみ Cookie を使用することを意味しますセッション固定攻撃を回避できます

コード内

int_set("session.use_cookies", 1 );

int_set("session.use_only_cookies", 1); URL を使用して隠しパラメータを渡します

session_start();

$seid = md5(uniqid(rand()), TRUE ));

$_SESSION["seid"] = $seid;

攻撃者はセッションデータを取得できますが$seid の値を確認することはできませんが、現在のページが自分で呼び出された Web プログラムであるかどうかを確認できます。

上記は、PHP の脆弱性 (7) - セッション ハイジャックに対する完全な解決策です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

11ベストPHP URLショートナースクリプト(無料およびプレミアム) 11ベストPHP URLショートナースクリプト(無料およびプレミアム) Mar 03, 2025 am 10:49 AM

多くの場合、キーワードと追跡パラメーターで散らかった長いURLは、訪問者を阻止できます。 URL短縮スクリプトはソリューションを提供し、ソーシャルメディアやその他のプラットフォームに最適な簡潔なリンクを作成します。 これらのスクリプトは、個々のWebサイトにとって価値があります

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

LaravelのバックエンドでReactアプリを構築する:パート2、React LaravelのバックエンドでReactアプリを構築する:パート2、React Mar 04, 2025 am 09:33 AM

これは、LaravelバックエンドとのReactアプリケーションの構築に関するシリーズの2番目と最終部分です。シリーズの最初の部分では、基本的な製品上場アプリケーションのためにLaravelを使用してRESTFUL APIを作成しました。このチュートリアルでは、開発者になります

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

2025 PHP状況調査の発表 2025 PHP状況調査の発表 Mar 03, 2025 pm 04:20 PM

2025 PHP Landscape Surveyは、現在のPHP開発動向を調査しています。 開発者や企業に洞察を提供することを目的とした、フレームワークの使用、展開方法、および課題を調査します。 この調査では、現代のPHP Versioの成長が予想されています

Laravelの通知 Laravelの通知 Mar 04, 2025 am 09:22 AM

この記事では、Laravel Webフレームワークの通知システムを検討します。 Laravelの通知システムを使用すると、さまざまなチャネルでユーザーに通知を送信できます。今日は、通知ovを送信する方法について説明します

See all articles