0

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

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

我试图制作文件夹结构,所有 php 文件(result.php)都在根目录后面的文件夹中。所以它不会使用重写规则或其他任何东西直接从浏览器访问。

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

4

3 回答 3

2

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

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

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

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

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

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

于 2012-07-29T16:08:40.367 回答
1

您无法通过移动它来保护它,因为除了会话(或其他类型的令牌)之外,无法区分请求result.php是否由合法的 AJAX 调用触发。 您需要使用 php 会话(或等效的东西)来: index.php

  1. 存储用户可以访问的内容(在 index.php 中)。
  2. 检查他是否可以在(result.php)中访问它
于 2012-07-29T16:10:48.500 回答
0

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

于 2012-07-29T16:09:59.450 回答