首页 > 编程语言 >【答题系统可参考】php 禁止api被跨域调用

【答题系统可参考】php 禁止api被跨域调用

时间:2025-01-16 11:56:03浏览次数:1  
标签:Origin Control HTTP 跨域 Access header api php

在 PHP 中,防止 API 被跨域调用可以通过设置适当的 HTTP 响应头来实现。跨域资源共享(CORS,Cross-Origin Resource Sharing)机制允许或拒绝来自不同源的请求。为了禁止跨域调用,你可以在你的 PHP 脚本中设置 Access-Control-Allow-Origin 头为 null 或者不设置这个头。

下面是一个简单的例子,展示了如何在 PHP 中禁止跨域调用:

<?php
// 设置 HTTP 响应头,禁止跨域调用
header("Access-Control-Allow-Origin: null");

// 你的 API 逻辑
$response = array(
    "message" => "API is working, but not allowed to be called from a different origin."
);

// 设置响应头为 JSON
header('Content-Type: application/json');

// 输出 JSON 响应
echo json_encode($response);
?>

 

在这个例子中,header("Access-Control-Allow-Origin: null"); 告诉浏览器这个资源不允许被任何外部源访问。这意味着,只有当请求来自同一个源(即同源策略下的请求)时,才能访问这个 API。

其他方法

1.查 Referer 头‌:
你可以检查 HTTP 请求的 Referer 头来验证请求是否来自一个允许的源。但请注意,Referer 头可以被伪造或省略,所以这不是一个完全可靠的方法。

if (isset($_SERVER['HTTP_REFERER'])) {
    $allowed_domain = 'https://yourdomain.com';
    if (strpos($_SERVER['HTTP_REFERER'], $allowed_domain) !== 0) {
        header('HTTP/1.1 403 Forbidden');
        echo json_encode(array("message" => "Access denied."));
        exit;
    }
} else {
    header('HTTP/1.1 403 Forbidden');
    echo json_encode(array("message" => "Access denied."));
    exit;
}

// 你的 API 逻辑

 

‌2.使用服务器配置‌:
如果你使用的是 Apache 或 Nginx 服务器,你也可以通过服务器配置来限制跨域请求。

(1)Apache‌:

在 .htaccess 文件中添加以下配置:

SetEnvIf Origin "http(s)?://(www\.)?yourdomain\.com(:[0-9]+)?$" ALLOW_ORIGIN
Header set Access-Control-Allow-Origin %{ALLOW_ORIGIN}e env=ALLOW_ORIGIN

(2)Nginx‌:
在 Nginx 配置文件中添加以下配置:

if ($http_origin ~* http(s)?://(www\.)?yourdomain\.com(:[0-9]+)?$) {
    add_header 'Access-Control-Allow-Origin' "$http_origin";
}

总结

最简单和直接的方法是通过设置 Access-Control-Allow-Origin 头来禁止跨域调用。然而,根据应用的安全需求,你可能需要结合其他方法,如检查 Referer 头或使用服务器配置,来提供更全面的保护。

标签:Origin,Control,HTTP,跨域,Access,header,api,php
From: https://www.cnblogs.com/cblx/p/18674730

相关文章

  • API Parrot:破解没有公开接口的网站
    在数字化浪潮中,开发者们常常面临一个挑战:如何高效地自动化、集成或抓取那些没有公开API的网站数据?今天,我要给大家介绍一款强大的工具——APIParrot,它绝对是开发者们的新利器!APIParrotAPIParrot是一款专门设计用于反向工程任何网站HTTPAPI的工具。它为开发者提供了一站......
  • API Mock
    APIMock为了让开发者更方便地开发小程序,开发者工具提供了APIMock的能力,可以模拟部分API的调用结果。运行环境下载并安装1.02.2003062或以上版本的开发者工具,下载地址。使用方法基础用法Mock的入口在工具调试面板顶部的Tab,点+新建规则规则示例运行如下代码......
  • Java中的高效集合操作:Stream API实战指南
    Java中的高效集合操作:StreamAPI实战指南1.引言:集合操作的痛点在日常开发中,我们经常需要对集合进行各种操作,比如过滤、映射、排序、聚合等。传统的做法是使用for循环或Iterator,代码冗长且容易出错。比如:List<String>names=newArrayList<>();for(Useruser:users......
  • PHP 8.4 安装和升级指南
    文章精选推荐1JetBrainsAiassistant编程工具让你的工作效率翻倍2ExtraIcons:JetBrainsIDE的图标增强神器3IDEA插件推荐-SequenceDiagram,自动生成时序图4BashSupportPro这个ides插件主要是用来干嘛的?5IDEA必装的插件:SpringBootHelper的使用与功能特点6A......
  • PHP变量
    上一篇文章已经学习了PHP的数据类型,今天将学习新的内容:变量。定义PHP中变量用一个美元符号后面跟变量名来表示(如$a),变量名是严格区分大小写的,并且不能以数字开头。<?php$a=1;$b='test';$c=[1,2,3];$4d=2;//非法变量名,以数字开头预定义变......
  • 服务端开发模式-thinkphp-重新整理workman
    一、登录接口<?php/***登录退出操作*User:龙哥·三年风水*Date:2024/10/29*Time:15:53*/namespaceapp\controller\common;useapp\controller\Emptys;useapp\model\permission\Admin;useapp\model\param\SystemasSystemModel;useEmail\EmailSen......
  • 轻松使用API将人像动漫化
    本文将介绍一种人像动漫化API对接说明,它可以通过输入一张人脸照片,生成个性化的二次元动漫形象,可用于打造个性头像、趣味活动、特效类应用等场景,提升社交娱乐的体验。接下来介绍下人像动漫化API的对接说明。申请流程要使用API,需要先到人像动漫化API对应页面申请......
  • php的token管理类(AI生成)
    当然,以下是一个简单的PHP类,用于生成和管理令牌(token)。这个类可以生成一个随机的令牌、验证令牌是否有效,并允许设置一个令牌的过期时间。<?phpclassToken{private$secretKey;private$token;private$expiration;/***Tokenconstructor.......
  • 【转】[C#] WebAPI 使用async和await
    转自:kimi.ai在.NETFramework4.5及以上版本中,WebAPI支持async和await关键字的使用。使用async和await对调用方(客户端)和服务器端都有不同的影响,以下是详细说明:对调用方(客户端)的影响响应时间:对于单个客户端请求来说,使用async并不会显著减少请求的响应时间。无论是同步还是......
  • Php+Mysql统计网页总访问次数和实时在线人数-海云博客
    自己写了一个统计,一个简单的网站流量统计,不错拿出来分享。可以统计当前页面的总访问次数和当前页面的实时在线人数。还可以显示你进入多少次。样式还有彩色背景渐变盒子,鼠标滑过或点击变成彩色直线,其他样式可以自己再改改。废话不多说直接上代码。海云博客 | 此文章链接:ht......