我目前正在开发一个类似于论坛的网站,目的是学习开发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响应仅来自我的域的请求,而我的内容无法通过只是获取请求并显示在另一个网站上?
答案 0 :(得分: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);})