Maison  >  Article  >  développement back-end  >  Comment interdire l'accès entre domaines en php

Comment interdire l'accès entre domaines en php

王林
王林original
2021-06-10 14:22:293308parcourir

La façon dont PHP implémente l'interdiction de l'accès entre domaines est de déterminer le référent HTTP. S'il n'y a pas de référent ou si le référent est accessible de manière non locale, alors l'accès est interdit.

Comment interdire l'accès entre domaines en php

L'environnement d'exploitation de cet article : système Windows10, php 7.3, ordinateur thinkpad t480.

Nous pouvons interdire l'accès entre domaines des deux manières suivantes.

Méthode 1 : Déterminer le référent HTTP

Le référent HTTP fait partie de l'en-tête Lorsque le navigateur envoie une requête au serveur Web, il amène généralement le référent à indiquer au serveur que. Je viens de quelle page est liée, le serveur peut obtenir certaines informations à traiter.

Ajoutez le jugement HTTP Referer au début de la demande de publication "fichier" ou "fonction" : Voici le code php, la méthode est la même quelle que soit la langue.

  • Il n'y a pas de Referer et c'est une connexion en accès direct. Par exemple, http://www.a.com/ajax.php renvoie l'erreur

  • Il existe un référent, mais ce site n'y accède pas. un domaine.com. Erreur de retour

// 如果(没有 Referer 或者 Referer 非本地访问的)return 'error' 或 die() 程序结束
if(!isset($_SERVER['HTTP_REFERER']) || !strstr($_SERVER['HTTP_REFERER'], 'http://www.a.com/')){
    echo "error";
    die();
}

Méthode 2 : le côté serveur interdit l'accès entre domaines

Nginx interdit l'accès entre domaines à un certain fichier 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 -------------------------------------

    ...
}

Partage de vidéos d'apprentissage gratuit :Tutoriel vidéo php

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn