如何阻止我的用户直接访问仅适用于ajax调用的页面?
在ajax调用期间传递密钥似乎是一种解决方案,而不使用密钥的访问将不会被处理.但是制作钥匙也很容易,不是吗?观点诅咒......
p/s:使用Apache作为webserver.
编辑:为了回答原因,我在index.php中有jQuery ui-tabs,并且这些选项卡内部是带有脚本的表单,如果直接访问它们将无法工作.为什么用户会想要这样做,我不知道,我只是想通过阻止直接访问没有验证脚本的表单来提高用户友好性.
没有办法保证他们通过AJAX访问它.直接访问和AJAX访问都来自客户端,因此很容易被伪造.
你为什么要这样做呢?
如果是因为PHP代码不是很安全,那么使PHP代码更安全.(例如,如果您的AJAX将用户ID传递给PHP文件,请在PHP文件中编写代码以确保它是正确的用户ID.)
正如其他人所说,可以模拟Ajax请求创建正确的标头.如果您想要进行基本检查以查看请求是否是Ajax请求,您可以使用:
if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') { //Request identified as ajax request }
但是,您永远不应该根据此检查确定安全性.如果这是你需要的,它将消除对页面的直接访问.
听起来你可能会以错误的方式处理事情.AJAX调用就像标准页面请求一样,只有按照惯例,响应才不会显示给用户.
但是,它仍然是客户端请求,因此您必须很高兴客户能够看到响应.以这种方式使用"密钥"来模糊访问只会使事情变得复杂.
我实际上说,观察源的"诅咒"是通过默默无闻来对抗安全的小武器.
那么你想要这样做的原因是什么?