我托管了一个网站,文件建议将文件放在文件夹public_html
下。
我在根文件夹中有三个文件index.php
(查看页面),common.js
和result.php(php)
。单击index.php
(视图)文件中的按钮将触发ajax函数result.php
。
问题是每个人都可以直接访问result.php
...
我试图建立文件夹结构,所有php文件(result.php
)都在root后面的文件夹中。因此,不会使用重写规则或其他任何内容直接从浏览器访问它。
请帮我解决这个问题...
答案 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会话(或类似的东西)来:
答案 2 :(得分:0)
您不能通过ajax访问文件,然后无法通过正确的浏览器请求访问,因为Ajax调用正在执行与Web浏览器相同的行为。