PHP でのセッションは安全ですか? ,PHP セッション セキュリティ_PHP チュートリアル
PHP のセッションは安全ですか? , PHP セッションのセキュリティ
私は長い間 PHP を開発してきましたが、プロジェクトを完了することに集中するたびに、セキュリティの問題にあまり注意を払ったことはありませんでしたが、最近インターネットでセキュリティに関する記事を目にしました。それを読んだ後、私は以前のプロジェクトに大きなセキュリティホールがあったことに気付き、プロジェクトを選んでテストしてみたところ、簡単にその被害に遭ってしまうことが分かりました。ここでは、PHP のセッションがどのように安全でないのか、またプロジェクト内のセキュリティを強化する方法を説明するために私が作成したテスト例を共有します。
セッションの原理や仕組みについては、インターネット上に良い紹介記事がたくさんありますので、自分で確認することも可能です。テスト用の例を直接共有しましょう。
このテストの例は主にログインページです。ログインに成功した後、パスワードを変更できます。
インターフェイスは次のとおりです
まず、プロジェクトの入り口で関数 session_start() を使用してセッションを開きます。このようにして、クライアントがリクエストを開始すると、ID 識別子、つまり SessionID が生成されます。これは、Cookie を通じてクライアントに保存され、クライアントとサーバー間の各通信は、識別のためにこの SessionID に依存します。
ログインに成功すると、ユーザーIDとユーザー名がセッションに保存されます
今後のすべての操作では、$_SESSION['userid'] が存在するかどうかを判断することで、ユーザーがログインしているかどうかがチェックされます。コードは次のとおりです:
パスワード変更インターフェイスの呼び出しは、ajax post を通じてサーバーにデータを送信します。
このコードは HTML ページに記述しているので、HTML コードを見ればインターフェースのアドレスがわかることに注意してください。
このようにしてパスワードを変更するためのインターフェースが実装されます。まず、ユーザーがログインしているかどうかを判断します。ユーザーがログインしている場合は、パスワードの変更操作が実行されます。
テスト例の実装アイデアは大まかに上記の通りです。
SessionID 攻撃を使用する
1. 1 つ目は、SessionID を取得することです。もちろん、攻撃者がこの ID を取得する方法はたくさんあります。ここでは取得方法を紹介しません。最初に通常どおりこのプロジェクトにアクセスし、次にブラウザを通じて SessionID を確認して正当なユーザー ID を取得することで、これをシミュレートできます。この ID はリクエストヘッダーで確認できます
セッションIDを取得後、ユーザーがログインに成功すると、サーバー側のセッションにユーザーの情報が残ります。
2. SessionID を取得した後、攻撃者がパスワードを変更するためのインターフェイスをすでに知っている場合、ユーザーのパスワードを直接変更できます。攻撃者がまだインターフェイス アドレスを取得していない場合は、ページ コードを調べることでインターフェイス アドレスを見つけることができます。次のコマンドを使用できます
上で述べたように、この例では、Ajax コードが HTML ページに記述されているため、インターフェイスのアドレスはこのページで確認できます
HTMLコードの一部は以下の通りです
3. インターフェースを取得したら、curl を使用して投稿をシミュレートし、データを送信してパスワードを変更できます
コマンドは以下の通りです
このユーザーがすでにログインしている場合、攻撃者は上記のコマンドを実行することでユーザーのパスワードを変更できます。
解決策
上記の攻撃に対しては、検証方法を複雑にすることで安全性を高めることができます。方法の 1 つは、リクエスト ヘッダーで User-Agent 項目を使用してセキュリティを強化することです
プロジェクトの開始時に、session_start() 関数を使用してセッションを開始しました。これで、このコードを session_start() の下に追加できるようになりました
その後、ログインするかどうかを判断するたびに、以下のように判断条件を追加します
これにより、上記の単純な攻撃を回避できます。
概要:
もちろん、実際の攻撃はそれほど単純ではありません。まず、SessionID を取得することが困難です。次に、上記の状況を回避するために、サーバーと通信するコードを可能な限り暗号化する必要があります。コードを 2 回変更した後は、攻撃の複雑さを増すことはできますが、攻撃を排除することはできません。攻撃にはさまざまな方法がありますが、これは単なるアイデアを示したものに過ぎませんが、実際の状況に応じてコードのセキュリティを強化することができるという原理は同じです。
ここでは私が仕事上で遭遇した問題を共有しているだけですが、皆さんももっと深く学んでいただければ幸いです。
興味があるかもしれない記事:
- PHP セッションの有効期間 session.gc_maxlifetime
- php セッションのセキュリティ問題分析
- PHP セッションのセキュリティ分析
- バックグラウンド ログインをより安全にする簡単な方法 (php 検証でセッションを追加)
- PHPでSESSIONを期限切れにしない原理と解決策の紹介
- PHPセッションの使い方を教える
- PHPでのセッション変数の破棄
- Sessionの仕組みとセキュリティ問題の詳しい説明(PHPの説明)例)
- ThinkPHP テンプレート内のセッションデータを呼び出す方法
- phpでセッションの有効期限を正確に設定する方法

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。
