>  기사  >  백엔드 개발  >  PHP에서 도메인 간 접근을 금지하는 방법

PHP에서 도메인 간 접근을 금지하는 방법

王林
王林원래의
2021-06-10 14:22:293321검색

PHP가 도메인 간 액세스 금지를 구현하는 방식은 HTTP 리퍼러를 결정하는 것입니다. 리퍼러가 없거나 리퍼러가 로컬이 아닌 경우 액세스가 금지됩니다.

PHP에서 도메인 간 접근을 금지하는 방법

이 기사의 운영 환경: windows10 시스템, PHP 7.3, thinkpad t480 컴퓨터.

다음 두 가지 방법으로 도메인 간 접근을 금지할 수 있습니다.

방법 1: HTTP 리퍼러 결정

HTTP 리퍼러는 헤더의 일부입니다. 브라우저가 웹 서버에 요청을 보낼 때 일반적으로 리퍼러를 가져와 내가 연결하는 페이지를 서버에 알려줍니다. 작업에 필요한 정보를 얻을 수 있습니다.

게시 요청 "파일" 또는 "함수" 시작 부분에 HTTP Referer 판단 추가: 다음은 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.