【问题标题】:Plesk/PHP Accept Requests Only From Your DomainPlesk/PHP 仅接受来自您的域的请求
【发布时间】:2019-06-24 06:31:31
【问题描述】:

我目前正在开发一个类似论坛的网站,目的是学习开发 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 响应仅来自我的域的请求,而我的内容不能仅通过获取请求并显示在另一个网站上?

【问题讨论】:

  • 查看 PHP $_SERVER[] superglobal。可能有助于新闻生成 PHP 脚本。
  • @DeDee 它是在互联网上写的,使用 $_SERVER 全局进行的检查可以被欺骗,但我不明白如何。

标签: php cors plesk


【解决方案1】:

出于安全原因,默认情况下浏览器会阻止对跨域的 ajax 请求的响应。这意味着默认情况下,来自其他域的任何网站向您的return_news.php 创建 ajax 请求都不会得到响应(尽管会发出请求)。

还有一个HTTP header 用于指定是否要允许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);})

【讨论】:

  • 非常感谢这回答了这个问题。还有一件事。这些标头指定浏览器如何正常工作?因为当我将我的 js 文件发送到另一台计算机时,请求不再是从我的主机生成的,而是由那台计算机生成的。所以实际上请求不是从我的域(或我的机器)生成的。但是浏览器可以找出用户在我的域上并接受结果。我理解对了吗?
  • 如果我理解正确你的问题,是的。您的服务器基于 http 协议提供内容,浏览器加载该内容并根据 html/js/css 标准负责解释它(在您的页面上呈现 html,执行 javascript)。您的服务器通过设置标头尝试帮助并使用浏览器(浏览器还设置标头以帮助服务器)。另一方面,浏览器想要保护用户,并将每个网页保存在沙箱中,因此,它对 CORS 施加了限制。您可以在开发人员工具的网络选项卡上查看所有通信(也可以查看标题)。
猜你喜欢
  • 2020-12-20
  • 2018-10-15
  • 1970-01-01
  • 2015-05-10
  • 1970-01-01
  • 2015-04-02
  • 2020-07-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多