ホームページ バックエンド開発 PHPチュートリアル PHP が CSRF 攻撃を防御する方法

PHP が CSRF 攻撃を防御する方法

Jun 30, 2023 pm 07:34 PM
php 防衛 csrf

PHP を使用してクロスサイト リクエスト フォージェリ (CSRF) 攻撃を防御する方法

Web アプリケーションの開発と普及に伴い、ネットワーク セキュリティの問題はますます重要になってきています。クロスサイト リクエスト フォージェリ (CSRF) 攻撃は、一般的な攻撃方法の 1 つとなっています。 CSRF 攻撃とは、攻撃者が正当なユーザーからのリクエストになりすまして、ユーザーが気づかないうちに送金やパスワードの変更などの悪意のある操作を実行することを指します。ユーザーと Web アプリケーションを保護するために、開発者はそのような攻撃から防御するための措置を講じる必要があります。この記事では、PHP を使用して CSRF 攻撃を防御する方法を紹介します。

  1. CSRF 攻撃の原理を理解する
    CSRF 攻撃から防御する前に、攻撃の原理を理解する必要があります。 CSRF攻撃の原理は、ユーザーが他のWebサイトやWebアプリケーションにログインした後のCookie情報を利用して、悪意のあるリクエストを正当なリクエストに偽装し、標的のWebサイトやアプリケーションに送信するというものです。したがって、CSRF 攻撃では、ターゲット Web サイトのユーザーが認証に合格した正規のユーザーである必要があります。
  2. トークンの生成と検証
    CSRF 攻撃を防御するために、トークンを使用してリクエストの正当性を検証できます。トークンは、ユーザーのセッションに関連付けられ、サーバー側に保存されるランダムに生成された文字列です。各フォームに、トークンの値を含む隠しフィールドを追加します。ユーザーがフォームを送信するとき、トークンの値がサーバー側に保存されている値と一致していることを確認する必要があります。それらが矛盾する場合、そのリクエストは違法であるため、当社はリクエストを終了するか、その他の必要な処理を行うことができます。

トークンを使用するサンプル コードは次のとおりです:

// 生成令牌
function generateToken() {
    $token = bin2hex(random_bytes(32));
    $_SESSION['csrf_token'] = $token;
    return $token;
}

// 验证令牌
function verifyToken($token) {
    if(isset($_SESSION['csrf_token']) && $_SESSION['csrf_token'] === $token) {
        return true;
    }
    return false;
}

// 在表单中添加令牌字段
function addTokenField() {
    $token = generateToken();
    echo '<input type="hidden" name="csrf_token" value="'.$token.'">';
}
ログイン後にコピー
  1. リクエスト ソースを確認する
    攻撃者がまだトークンを渡すことができるため、トークンを確認するだけでは十分ではありません。トークンを取得するための他の方法。セキュリティを強化するために、リクエストの送信元を確認することもできます。リクエストのソースを確認するには 2 つの方法があります。1 つは Referer ヘッダーを確認する方法、もう 1 つは Origin ヘッダーを確認する方法です。

Referer ヘッダーを確認するサンプル コード:

function verifyReferer() {
    if(isset($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'], $_SERVER['HTTP_HOST']) !== false) {
        return true;
    }
    return false;
}
ログイン後にコピー

Origin ヘッダーを確認するサンプル コード:

function verifyOrigin() {
    if(isset($_SERVER['HTTP_ORIGIN']) && $_SERVER['HTTP_ORIGIN'] === 'https://www.example.com') {
        return true;
    }
    return false;
}
ログイン後にコピー
  1. Cookie 属性を適切に設定する
    Inセキュリティを向上させるために、Cookie の属性を設定することで CSRF 攻撃の難易度を高めることができます。たとえば、HTTPS 接続下でのみ Cookie が送信されるように設定したり、Cookie の範囲を現在のドメイン名のみに制限したりできます。

Cookie 属性を設定するためのサンプル コード:

session_set_cookie_params([
    'lifetime' => 86400, // Cookie的有效期为一天
    'path' => '/',
    'domain' => '.example.com',
    'secure' => true, // 仅在HTTPS连接下传输
    'httponly' => true // 仅通过HTTP协议访问
]);
session_start();
ログイン後にコピー
  1. ログインとログアウトのセキュリティに注意する
    ログインとログアウトは、Web アプリケーションにおいて非常に重要な操作です。セキュリティにも特別な注意が必要です。ログインおよびログアウトのプロセスを適切に処理すると、CSRF 攻撃を効果的に防御できます。

ログイン プロセス中に、ログイン トークンを生成し、サーバー側とセッションに保存できます。各ログイン要求では、トークンの有効性を検証して、トークンがログイン プロセスを通じてのみ取得できることを確認する必要があります。

ログアウト プロセス中に、ユーザーに関連するセッション データを破棄し、セッション ID を削除する必要があります。これにより、攻撃者がセッション ID を盗んでユーザーになりすますのを防ぎます。

概要:
CSRF 攻撃はネットワーク セキュリティの一般的な問題ですが、この攻撃を防御するためにいくつかの対策を講じることができます。この記事では、トークンの生成と検証、リクエスト ソースの検証、Cookie 属性の設定、ログインとログアウトのセキュリティへの注意など、PHP を使用して CSRF 攻撃を防御する方法をいくつか紹介します。これらの方法を組み合わせて使用​​することで、Web アプリケーションとユーザーのセキュリティを効果的に保護できます。

以上がPHP が CSRF 攻撃を防御する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

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

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

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

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

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

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

CakePHP のロギング CakePHP のロギング Sep 10, 2024 pm 05:26 PM

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

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

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

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

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

See all articles