Heim  >  Artikel  >  Backend-Entwicklung  >  So verbieten Sie den domänenübergreifenden Zugriff in PHP

So verbieten Sie den domänenübergreifenden Zugriff in PHP

王林
王林Original
2021-06-10 14:22:293311Durchsuche

Die Art und Weise, wie PHP das Verbot des domänenübergreifenden Zugriffs implementiert, besteht darin, den HTTP-Referer zu bestimmen. Wenn kein Referrer vorhanden ist oder nicht lokal auf den Referrer zugegriffen wird, ist der Zugriff verboten.

So verbieten Sie den domänenübergreifenden Zugriff in PHP

Die Betriebsumgebung dieses Artikels: Windows 10-System, PHP 7.3, Thinkpad T480-Computer.

Wir können den domänenübergreifenden Zugriff auf die folgenden zwei Arten verbieten.

Methode 1: HTTP-Referer ermitteln

Der HTTP-Referer ist Teil des Headers. Wenn der Browser eine Anfrage an den Webserver sendet, teilt er dem Server normalerweise mit, von welcher Seite ich verlinke, sodass der Server Sie können einige Informationen erhalten, mit denen Sie arbeiten können.

Fügen Sie den Urteils-HTTP-Referer am Anfang der Post-Anfrage „Datei“ oder „Funktion“ hinzu: Das Folgende ist der PHP-Code, die Methode ist unabhängig von der Sprache dieselbe.

  • Es gibt keinen Referrer und es handelt sich um eine Direktzugriffsverbindung. Beispielsweise gibt http://www.a.com/ajax.php einen Fehler zurück

  • Es gibt einen Referrer, auf den diese Website jedoch nicht zugreift, und der Referrer enthält keine.com-Domain. Fehler zurückgeben

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

Methode 2: Domänenübergreifenden Zugriff auf der Serverseite verbieten

Nginx verbietet domänenübergreifenden Zugriff auf eine bestimmte PHP-Datei

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 -------------------------------------

    ...
}

Kostenlose Lernvideofreigabe: php-Video-Tutorial

Das obige ist der detaillierte Inhalt vonSo verbieten Sie den domänenübergreifenden Zugriff in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn