我正在使用jquery脚本,该脚本使用ajax和PHP上传文件。它向upload_a_file.php发送请求,然后上传文件。
有没有办法可以确保upload_a_file.php没有直接在浏览器中加载?
我尝试将upload_a_file.php放在我的public_html文件夹上。但似乎无法通过javascript加载upload_a_file.php。
这是我在javascript中用来请求upload_a_file.php的url格式:
../upload_a_file.php
甚至可以使用javascript访问public_html上面的文件吗?
答案 0 :(得分:4)
JS无法访问您自己作为用户无法访问的任何服务器上的任何内容。如果文件位于站点的文档根目录之外,则用户或JS无法访问该文件。想象一下,如果JS能够神奇地绕过服务器上的访问限制并再抓住它,那么Web将会是一个有趣的地方。 “噢,我打算抓住这个银行的帐户列表,但它不在文档根目录中。好东西我有Javascript,它可以做任何事情!”
就像24
的每一集一样,“修补子网”可以神奇地绕过任何防火墙并从甚至不在线或(更好)甚至没有通电的机器获取数据。令人惊奇的事情,那些子网。
答案 1 :(得分:2)
您可以检查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
}
答案 2 :(得分:0)
javascript正在浏览器中运行。它通过浏览器发出请求。所以,不,没有办法通过ajax访问页面,但不能直接从浏览器访问。
答案 3 :(得分:0)
不,不是直接的。您可以调用其他脚本(PHP或其他),这些脚本将使用include
“调用”您的脚本,或者例如使用fopen
或curl
。
答案 4 :(得分:0)
没有什么可以访问public_html之上的文件,因为Web服务器不会为它们提供服务。这样做会有明显的安全漏洞,比如能够查看文件系统上的任何文件。
如果你想限制文件只能通过你的javascript加载,我想你会想看看php中的$ _SERVER ['HTTP_REFERER']变量。这应该设置为javascript正确访问时所在的页面。如果它是其他任何或空的,则用户以其他方式访问它。
但是,为了安全起见,不应该依赖此方法,因为可以使用正确的工具欺骗引用者。
答案 5 :(得分:0)
由于直接浏览器访问页面是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();
}