阻止直接访问PHP文件,只允许本地javascript访问它

时间:2012-07-14 06:20:23

标签: php header

我需要一种方法来阻止对php文件的所有访问,但允许发送xmlhttp请求的javascript文件。该js文件托管在我的服务器上,必须保留在我的服务器上才能工作

我有以下

header('Access-Control-Allow-Origin: *');

但允许任何人访问它。

2 个答案:

答案 0 :(得分:3)

嗯,我不认为这是可能的。任何人都可以向您的服务器发出请求,但您的服务器会选择响应者以及如何响应请求。现在,如果您只希望服务器响应您的JS,那么您必须在从JS发出HTTP请求时通知服务器。如果没有暴露您的Javscript文件的身份,那么就无法完成这一点,基于此身份可以由服务器识别您的JS。但任何人都可以打开你的JS并阅读它并弄清楚你是如何提出请求并使用相同的东西。

一种可能的解决方案是,使用标题('Access-Control-Allow-Origin:*')允许每个人向您的服务器发出请求,但在服务器端,保留一个允许的域/来源列表您的服务器上可能使用或将要在其网站上使用您的JS文件的数据库。根据您获得的AJAX请求,您可以从数据库中检查是否允许请求的来源并做出相应的响应。现在,如果有人试图通过JS之外的任何其他方式请求您的PHP文件,则根据数据库中的数据,您可以拒绝请求或接受请求。如果允许的用户/网站这样做,那么他们将故意搞乱他们自己的数据。

答案 1 :(得分:0)

试试这个:

if (empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) <> 'xmlhttprequest') 
{ 
    die('direct access is not allowed'); 
} 

此外,您可以随时检查引荐来源,例如$ _SERVER ['HTTP_REFERER'],以确保只有您域中的脚本才能访问它。