允许PHP文件被javascript请求,而不是直接从浏览器请求
Allow PHP file to be requested by javascript but not directly from browser
我使用一个jquery脚本,用ajax和PHP上传文件。它向upload_a_file.php发送请求,然后上传文件。
是否有一种方法可以确保upload_a_file.php不直接加载在浏览器中?
我试着把upload_a_file.php放在我的public_html文件夹上面。但似乎无法让javascript加载upload_a_file.php.
这是我在javascript中使用的url格式来请求upload_a_file.php:
../upload_a_file.php
它甚至可以访问文件上面的public_html与javascript?
JS不能访问服务器上的任何你自己作为用户不能访问的东西。如果文件位于站点的文档根目录之外,则用户或JS无法访问该文件。想象一下,如果JS可以神奇地绕过服务器上的访问限制并获取更多内容,web将会是一个多么有趣的地方。"啊,我本来想要获取这家银行的账户列表,但它不在文档根目录中。好在我有Javascript,它可以做任何事情!"
就像24
的每一集一样,"打补丁进入子网"可以神奇地绕过任何防火墙,从甚至没有在线或(更好的是)甚至没有通电的机器上获取数据。这些子网真是太神奇了
您可以检查HTTP报头X_REQUESTED_WITH
是否存在,并且其值为XMLHttpRequest
。这不是非标准的头文件,但是大多数JavaScript框架(包括jQuery、Prototype和mootools)都遵循这个约定。
在PHP中可以访问$_SERVER['HTTP_X_REQUESTED_WITH'];
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
{
// do something
}
javascript正在浏览器中运行。它通过浏览器发出请求。所以,不,没有办法通过ajax访问页面,但不是直接从浏览器
不,不直接。你可以调用其他脚本(PHP或其他),将要么"调用"你的脚本与include
或例如与fopen
或curl
。
没有东西可以访问public_html以上的文件,因为web服务器不会为它们提供服务。这样做会有明显的安全漏洞,比如可以查看文件系统上的任何文件。
如果你想限制文件只能通过javascript加载,我认为你会想看看php中的$_SERVER['HTTP_REFERER']变量。这应该设置为javascript被正确访问时所处的页面。如果它为其他值或为空,则用户正在以其他方式访问它。
但是,使用这种方法不应该依赖于安全性,因为引用者可以被正确的工具欺骗。由于浏览器对页面的直接访问是PHP的GET请求,因此这里有一个非常基本的访问控制方法,以防止某人无意中直接访问upload_a_file.php:
在jquery脚本中,使用类型为"POST"的ajax请求:
$.ajax({
url: "../upload_a_file.php",
dataType: "json",
type: "POST"
});
并在你的upload_a_file.php中使用它:
if ($_SERVER['REQUEST_METHOD'] == "POST") {
// upload a file
} else {
header("Location: http://example.com/myPublicUploadPage.php");
die();
}
- 防止“;jQuery(html)"防止触发浏览器请求图像和其他参考内容
- Chrome浏览器“;挂起”;同时在循环中执行AJAX请求
- 为什么我从浏览器修改html/js时会多次发送ajax请求
- 如果不刷新Rails中的浏览器,AJAX请求就无法看到效果
- 使用Javascript的Ajax请求在iPhone浏览器中不起作用
- HTTP请求使用cURL,但在浏览器中使用javascript时会得到CORS响应
- Web 工作线程中的同步 XHR 请求是否仍会锁定浏览器
- 谷歌cookie是否存在于chrome,火狐,即在phantomjs中发出某些请求时发送的浏览器
- 当按下浏览器后退按钮时,如何用相同的post参数激发ajax请求
- 在浏览器上不打开url的情况下自动请求
- 当我们打开ADF应用程序的同一网页的不同版本时,如何让浏览器请求java脚本
- 在Node.js和浏览器上拦截(mock)http请求
- 当浏览器请求部分内容范围请求时,如何检测pdf何时加载到iframe中
- 浏览器不发送 CORS HTTP 选项用于发布请求
- 减少请求的文件大小或减少浏览器计算次数
- 如何在浏览器中压缩json请求数据
- 跨源请求被POST阻止,但浏览器上的req可以正常工作,但设备上不工作
- 是否有任何事件在浏览器请求另一个资源(如图像)之前触发
- AJAX-如何在不冻结浏览器的情况下逐个发出异步请求
- 用于导出到CSV/Excel的数据URI(无服务器端请求):浏览器支持/限制