如何只允许从我的服务器上的文件调用PHP脚本?

时间:2011-04-26 10:40:53

标签: php javascript html

对于我网站上的AJAX,我从Javascript文件调用something.php?request = bla。我不希望用户查看此请求的结果,甚至不要通过输入www.myurl.com/something.php?request=bla来运行PHP文件。我只希望我的服务器上的文件能够调用PHP文件。我考虑过很多事情,例如在PHP脚本本身中进行比较的秘密值,但这听起来太复杂了。我相信有一种更简单的方法。

如何使PHP文件只能在服务器上存在的脚本调用它时才能运行?用户不应该使用他们的地址栏来运行它。

3 个答案:

答案 0 :(得分:8)

这根本不可能。您的Ajax请求始终来自客户端。

理论上,您可以检查HTTP_REFERER标题,但作为安全措施,完全无用。来自客户端的请求(Ajax或非Ajax)的每个方面都可以自由操作,包括referer字段。伪造据称在您的页面上启动的Ajax请求是微不足道的。

首先应该强制实施这样的限制:如果您有一个安全系统(如登录),该系统的限制也将(或应该)应用于Ajax请求。

如果您的Ajax请求允许在没有身份验证的情况下执行有害操作(如删除),则需要添加身份验证。您无法将这些请求限制在某个上下文或网站上。

答案 1 :(得分:1)

对所有AJAX调用使用POST,并拒绝所有GET请求。这不会是完美的,但它会足够好。

答案 2 :(得分:0)

作为 解决方法 (仅限!),您可以探测X-Requested-With:标头。这将真正的AJAX请求与地址栏调用区分开来。您无法确保请求的来源。

if (stristr($_SERVER["HTTP_X_REQUESTED_WITH"], "XMLHttpRequest")) {

(您可以使用$ .ajax()调用注入更多混淆标题。但同样,这只会让伪造更加麻烦,而不是不可能。)