• 技术文章 >后端开发 >PHP问题

    php如何实现禁止跨域访问

    VV2021-06-10 14:22:29原创98

    php实现禁止跨域访问的方法是,判断HTTP Referer,如果没有Referer或者Referer是在非本地访问的,那么就禁止访问。

    本文操作环境:windows10系统、php 7.3、thinkpad t480电脑。

    我们可以通过如下两种方式来实现禁止跨域访问。

    方法一:判断 HTTP Referer

    HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器以此可以获得一些信息用于处理。

    在 post 请求 “文件” 或 “函数” 的最开始地方加入判断 HTTP Referer:以下为 php 代码,不语言做法相同。

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

    方法二:服务器端禁止跨域访问

    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中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:php 跨域访问
    上一篇:php中die函数怎么使用 下一篇:如何使用正则替换的方式实现清除字符串中所有的HTML标签?
    第16期线上培训班

    相关文章推荐

    • PHP如何解决跨域访问问题?(代码示例)• 什么是ajax跨域访问• PHP设置多域名允许跨域访问• php如何破解禁止跨域访问

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网