php - Plesk/PHP 仅接受来自您的域的请求
问题描述
我目前正在开发一个类似论坛的网站,目的是学习开发 Web 应用程序和应用程序安全性。网站的某些部分受凭据保护。
但是有一个 .php 脚本可以返回最新消息。我的 news.php(通过 javascript 和 jquery ajax)向 return_news.php 发出请求,以获取有关最新消息的 json 文件。而此时出现了一个问题。任何人都可以向 return_news.php 发送请求并在他们的网站上显示我的数据。我想做到这一点,以便只有我主机上的文件才能向我的端点发出请求或使数据只能通过我的域https://www.example.com访问,并拒绝来自其他来源的任何请求。
我做了什么:
我在网上做了一些研究。阅读一些关于 CORS 和 .htaccess 文件的文章。但是我的主机在云服务器上,我认为我无法访问它。而且我找不到检查主机当前配置的方法。该问题似乎与CORS有关,但我找不到有关如何实现目标的详细说明。
摘要:如何配置我的网站以使内容仅通过我的域可用(例如https://www.example.com),我的 api 响应仅来自我的域的请求并且无法获取我的内容仅通过获取请求并显示在另一个网站上?
解决方案
默认情况下,出于安全原因,浏览器会阻止对跨域的 ajax 请求的响应。这意味着默认情况下,来自其他域的任何网站向您创建 ajax 请求return_news.php
都不会得到响应(尽管会发出请求)。
还有一个HTTP 标头用于指定是否要允许 CORS。因此,在您的情况下,可以确定的是,您可以将其设置在return_news.php
文件的顶部
header("Access-Control-Allow-Origin: https://www.example.com");
这指示浏览器仅在 ajax 来自www.example.com
域下的页面时才返回响应。
您可以通过访问任何其他域页面来检查它并在 javascript 控制台上对其进行测试,然后检查网络选项卡以获取更多信息。
fetch('https://www.example.com/return_news.php').then(function(response) {console.log(response);})
推荐阅读
- loops - Jmeter:为什么我的线程在一个循环完成后没有重新启动?
- google-cloud-platform - 谷歌云连接本地计算机到网络
- c - 指向常量结构的常量指针为零
- nuxt.js - 使用 ag 网格作为 nuxt 组件
- html - 如何从网页中提取数据
- linux-kernel - 没有调用探测函数?
- javascript - React useState hook:将 setter 传递给子功能更新、回调和 useCallback
- android - libicuuc.so (utext_close) 中的 Android 神秘崩溃
- ansible - 将逗号分隔的字符串拆分为 Ansible 中的字典
- google-apps-script - API 到 Google 表格 - 无法获取数据