ホームページ >バックエンド開発 >PHPの問題 >PHPでクロスドメインアクセスを禁止する方法

PHPでクロスドメインアクセスを禁止する方法

王林
王林オリジナル
2021-06-10 14:22:293382ブラウズ

PHP がクロスドメイン アクセスの禁止を実装する方法は、HTTP リファラーを決定することです。リファラーが存在しない場合、またはリファラーが非ローカルでアクセスされた場合、アクセスは禁止されます。

PHPでクロスドメインアクセスを禁止する方法

#この記事の動作環境: Windows10 システム、php 7.3、thinkpad t480 コンピューター。

次の 2 つの方法でクロスドメイン アクセスを禁止できます。


方法 1: HTTP リファラーを決定する

HTTP リファラーはヘッダーの一部です。ブラウザが Web サーバーにリクエストを送信するとき、通常はリファラーを呼び出してサーバーに次のことを伝えます。私はどのページからリンクされているかに応じて、サーバーは処理するためにいくつかの情報を取得できます。

投稿リクエストの「ファイル」または「関数」の先頭に判定HTTPリファラーを追加します。 以下はphpコードです。方法は言語に関係なく同じです。

  • リファラーはなく、直接アクセス接続です。たとえば、http://www.a.com/ajax.php はエラー

  • を返します。リファラーはありますが、このサイトにはアクセスされていません。リファラーには a. comドメイン。エラーを返す

  • // 如果(没有 Referer 或者 Referer 非本地访问的)return 'error' 或 die() 程序结束
    if(!isset($_SERVER['HTTP_REFERER']) || !strstr($_SERVER['HTTP_REFERER'], 'http://www.a.com/')){
        echo "error";
        die();
    }
方法 2: サーバー側でクロスドメイン アクセスを禁止します

Nginx は特定の PHP ファイルへのクロスドメイン アクセスを禁止します

location ~ \.php$ {
    ...

    #新增代码 start -------------------------------------

    # 假设 ajax.php 文件路径是 /includes/ajax.php 和网站域名是 www.a.com

    # 新增一个变量 $nolocal 值为 1
    set $nolocal 1;

    #下面开始判断,不是 POST 或者请求路径不是 ajax.php 的路径或者请求来源属于本站域名时,都设为 0

    #因为 nginx 不支持多条件判断,这里用三个 if ~
    if ($request_method != POST) {
        set $nolocal 0;
    }
    if ($request_uri != /includes/ajax.php) {
        set $nolocal 0;
    }
    if ($http_referer ~* "www.a.com") {
        set $nolocal 0;
    }

    #经过上面的筛选,值是 1 的,也就是本站外来源POST ajax.php 数据过来,直接返回 403 拒绝处理
    #这样,其他来源的请求就浪费不了你的PHP进程了。
    if ($nolocal) {
        return 403;
    }

    #新增代码 end -------------------------------------

    ...
}

無料の学習ビデオ共有:

php ビデオ チュートリアル

以上がPHPでクロスドメインアクセスを禁止する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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