仅在来自一页时如何响应请求?

时间:2019-05-10 10:39:35

标签: javascript php

我正在php网站上工作。我有一个名为pageX.php的页面,在该页面上我进行了Ajax调用:

 xmlhttp.open("GET", "/getData/dat?q=" + str, true);

我想避免显示此请求中包含的数据。另外,我希望仅当它来自pageX.php时才能够响应此请求,而无其他地方。

我尝试使用PHP会话,但是没有用-如果您直接从浏览器地址栏转到

,服务器仍会响应请求
  

mysite.com/getData/dat?q=1

您能提供解决此问题的方法吗?

2 个答案:

答案 0 :(得分:0)

您说过尝试使用会话。我想这将是一种快速而简单的方法,而无需遵循OAuth等各种身份验证协议的路径。

使用会话意味着,如果您使用相同的浏览器作为当前的pageX.php,则 将能够从另一个选项卡访问Proxy

这是因为该浏览器仍会向您的主机发送会话cookie。但是,如果尝试使用新的浏览器或新的设备,则您将无法发出该请求,因为您不再具有相同的会话Cookie。

因此,唯一的风险是,其他有权访问您用户计算机的人也可以访问PageX.php及其会话。

因此,如果您认为使用PageX.php的人未在共享计算机上使用它,那么这是一个很好的折衷。

答案 1 :(得分:0)

CORS 不需要将请求发送到同一域上的资源,因为它是从同一来源发送的。这里的问题是,您有一个开放的路由,该路由接受基于该主键以敏感信息响应的参数。您需要关闭该路线。

为此,您可以使用JWT之类的东西来为用户生成承载。有点像“记住我的令牌”。当用户进行身份验证并将其存储为会话时,可以生成此消息,如下所示:

r'(<.+>[\d+:\d+])|([[^:]+:\d+(:\d+)?])|(`\d+`)' 

您的封闭路线现在看起来像这样:

['001', ':xxxxx:banana', '[1:3]']

然后,(以JQuery为例),您可以像这样简单地请求封闭的路线:

001

这现在使用户无法使用自己的参数来伪造请求。