保护文件免受直接访问

时间:2012-07-29 16:03:49

标签: php security .htaccess

我托管了一个网站,文件建议将文件放在文件夹public_html下。 我在根文件夹中有三个文件index.php(查看页面),common.jsresult.php(php)。单击index.php(视图)文件中的按钮将触发ajax函数result.php

问题是每个人都可以直接访问result.php ...

我试图建立文件夹结构,所有php文件(result.php)都在root后面的文件夹中。因此,不会使用重写规则或其他任何内容直接从浏览器访问它。

请帮我解决这个问题...

3 个答案:

答案 0 :(得分:2)

要使文件只能通过ajax访问,您可以使用:

public static function isAjax() {
    return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH']=="XMLHttpRequest");
}

返回true或false。基本上如果它返回true,那么让用户继续,否则停止它们。

提醒注意:并非所有JS库/框架实际上都设置了此标头,但大多数(JQuery,Mootools等)并不是所有版本,因此在使用之前请确保您拥有最新版本的库/框架。

另外,如果用户欺骗了你的标题,那么没有真正的方法可以阻止它们。

我倾向于使用它作为阻止AJAX页面公开显示的前兆。我还使用参数完整性检查和会话中存储的随机哈希(CSRF类型的东西)来检查用户是否合法地访问了AJAX页面。

答案 1 :(得分:1)

你无法通过移动它来保护它,因为无法区分result.php的{​​{1}}请求是否是由来自index.php的合法AJAX调用触发的,除了会话(或某些会话)其他类型的令牌) 您需要使用php会话(或类似的东西)来:

  1. 存储用户可以访问的内容(在index.php中)。
  2. 检查他是否可以访问(result.php)

答案 2 :(得分:0)

您不能通过ajax访问文件,然后无法通过正确的浏览器请求访问,因为Ajax调用正在执行与Web浏览器相同的行为。