ホームページ  >  記事  >  バックエンド開発  >  PHP でのセッションは安全ですか? ,PHP セッション セキュリティ_PHP チュートリアル

PHP でのセッションは安全ですか? ,PHP セッション セキュリティ_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-12 09:00:12826ブラウズ

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でセッションの有効期限を正確に設定する方法

www.bkjia.com本当http://www.bkjia.com/PHPjc/1094755.html技術記事 PHP でのセッションは安全ですか? , PHP セッションのセキュリティ 私は長い間 PHP を開発してきましたが、プロジェクトを完了することに集中するたびに、セキュリティの問題をあまり気にしたことがありませんでした...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。