【答题系统可参考】php 禁止api被跨域调用
在 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 头或使用服务器配置,来提供更全面的保护。
【答题系统可参考】php 禁止api被跨域调用的更多相关文章
- ajax——CORS跨域调用REST API 的常见问题以及前后端的设置
RESTful架构是目前比较流行的一种互联网软件架构,在此架构之下的浏览器前端和手机端能共用后端接口. 但是涉及到js跨域调用接口总是很头疼,下边就跟着chrome的报错信息一起来解决一下. 假设:前 ...
- 以短链服务为例,探讨免AppKey、免认证、Ajax跨域调用新浪微博API
新浪微博的API官方提供了很多种调用方式,支持编程的,归根结底就是两种: 1.基于Oauth协议,使用Open API.(http://open.weibo.com/wiki/%E6%8E%88%E6 ...
- 如何通过js跨域调用ASP.NET Web API (请问如何实现在javascript中通过http get的方式跨域调用ASP.NET Web API?)
客户端js无需任何专门设置,使用通常的ajax调用即可: $.ajax({ url: '跨域URL', type: 'get', dataType: 'json', success: function ...
- 改变mvc web api 支持android ,ios ,ajax等方式跨域调用
公司一个移动后端的项目用到了 webapi 项目搭建到外网环境共app开发者调用测试接口时遇到了一个问题 接口不允许跨域调用 .查阅资料明白 同源策略原则根据请求报头值 Origin 与回应报头值 A ...
- web api 跨域请求,ajax跨域调用webapi
1.跨域问题仅仅发生在Javascript发起AJAX调用,或者Silverlight发起服务调用时,其根本原因是因为浏览器对于这两种请求,所给予的权限是较低的,通常只允许调用本域中的资源,除非目标服 ...
- AJAX跨域问题解决方法(1)——禁止浏览器进行跨域限制
思路:通过命令行修改浏览器启动参数,使得浏览器不进行跨域检查,从而允许跨域 方法:命令行参数启动浏览器后添加参数--disable-web-security 例:chrome --disable-we ...
- jQuery跨域调用Web API
我曾经发表了一篇关于如何开发Web API的博客,链接地址:http://www.cnblogs.com/guwei4037/p/3603818.html.有朋友说开发是会开发了,但不知道怎么调用啊? ...
- Web API 解决跨域问题
一.跨域问题的由来 同源策略:出于安全考虑,浏览器会限制脚本中发起的跨站请求,浏览器要求JavaScript或Cookie只能访问同域下的内容. 正是由于这个原因,我们不同项目之间的调用就会被浏览器阻 ...
- 在Angular.js中的H5页面调用Web api时跨域问题处理
/// <summary> /// 被请求时 /// 在Angular.js中的H5页面调用Web api时跨域问题处理 /// </summary> /// <para ...
- Asp.net Vnext api CORS( 跨域)
概述 跨域资源共享(CORS )是一种网络浏览器的技术规范,它为Web服务器定义了一种方式,允许网页从不同的域访问其资源.而这种访问是被同源策略所禁止的.CORS系统定义了一种浏览器和服务器交互的方式 ...
随机推荐
- 【C#】【平时作业】习题-5-类的基础知识
一.概念题 1. 举例说明什么是类,什么是对象,并说明类与对象的关系? 类:具有相同特性(数据元素)和行为(功能)的对象的抽象就是类. 对象:对象是人们要进行研究的任何事物,它不仅能表示具体的事物,还 ...
- Qt音视频开发10-ffmpeg内核硬解码
一.前言 为了极大的降低CPU的占用,实现硬解码(也叫硬件加速)非常有必要,一个视频文件或者一路视频流还好,如果增加到64路视频流呢,如果是4K.8K这种高分辨率的视频呢,必须安装上硬解码才是上上策. ...
- Qt编写的项目作品16-Onvif搜索和云台控制工具
一.功能特点 广播搜索设备,支持IPC和NVR,依次返回. 可选择不同的网卡IP进行对应网段设备的搜索. 依次获取Onvif地址.Media地址.Profile文件.Rtsp地址. 可对指定的Prof ...
- DataTable 循环取值
//list是datatable类型 for (int i = 0; i < list.Rows.Count; i++) { var A = list.Rows[i]["列名" ...
- [转]OpenLayer4地图全屏的实现
第一种方式:自实现 1.首先将地图容器的长宽设置成100%. 2.对form 和body标签长宽设置成100%. 3.对浏览器进行全屏设置. 具体代码如下所示(fullextent 为全屏安全ID.) ...
- spark (五) RDD的创建 & 分区
目录 1. RDD的创建方式 1.1 从内存创建RDD 1.2 从外部存储(文件)创建RDD 1.3 从其他的RDD创建 1.4 直接 new RDD 2. 分区(partition) 2.1 mak ...
- 手把手带你使用Karpenter减少K8s集群资源浪费
Kubernetes 集群的主要成本因素之一是数据平面上的计算层.将 Kubernetes 集群运行在 Amazon EC2 Spot 实例上是一种显著降低计算成本的有效方式.使用 Spot 实例可以 ...
- 如何快速的开发一个完整的iOS直播app(点赞功能)
客户端代码 点击小红心,发送socket给服务器,并且要传递房间Key给服务器,通知给哪个主播点赞,就能传入到对应的分组socket中 怎么传递房间key,房间Key在主播界面,一般一个客户端,只会产 ...
- 一个基于 Roslyn 和 AvalonEdit 的跨平台 C# 编辑器
前言 今天大姚给大家分享一个基于 Roslyn 和 AvalonEdit 开源.轻量.跨平台的 C# 编辑器:RoslynPad. Roslyn介绍 Roslyn是一个强大的.NET编译器实现,为C# ...
- ef 值转换与值比较器
前言 简单介绍一下,值转换器和值比较器. 正文 为什么有值转换器这东西呢? 那就是这个东西一直必须存在. 比如说,我们的c# enum 对应数据库的什么呢? 是int还是string呢? 一般情况下, ...