我目前有一个PHP文件要求您使用MySQL数据库登录。登录后,会出现3个链接,允许我下载文件。虽然,如果我直接访问该文件,它将下载而无需登录。我如何阻止人们通过URL栏下载,但仍然允许JavaScript下载文件?
如果这不可能,我还能做些什么来允许下载吗?例如,使用PHP下载而不是JavaScript?我知道JavaScript是客户端,所以我想知道这是否会阻止它访问下载。
我无法提供太多代码,但这是下载它的JavaScript。该链接基本上调用了downloadLink函数;
var downloadURL = function downloadURL(url) {
cLog("STDOUT: Attempting Download Of File: "+url);
var hiddenIFrameID = 'hiddenDownloader',
iframe = document.getElementById(hiddenIFrameID);
if (iframe === null) {
iframe = document.createElement('iframe');
iframe.id = hiddenIFrameID;
iframe.style.display = 'none';
document.body.appendChild(iframe);
}
iframe.src = url;
};
function downloadLink(fileLink) {
if (fileLink) {
cLog("STDOUT: File Link: "+fileLink);
downloadURL("/DownloadAssets/"+fileLink);
cLog("STDOUT: Function Finish, File Should Be Queded");
} else {
cLog("ERROR: No File Link");
}
}
答案 0 :(得分:1)
基本上,你不能。
HTTP服务器完全不知道任何给定的HTTP请求是来自浏览器URL栏,页面中的iframe还是来自Javascript代码。它们都只是HTTP请求。
如果您想允许某些类型的访问并阻止其他类型的访问,那么您必须在服务器上实现访问控制,以便除非提供正确的凭据,否则不会满足HTTP请求。
浏览器环境面临的挑战是,客户端代码中几乎没有任何内容是安全的(所有人都可以查看),因此确定的黑客将能够找到您在客户端放置的任何密码javascript将用作凭据,然后他们可以随时使用它们。
我无法准确说出您真正想要做的事情,但想要仅向某些用户提供下载的网站通常会执行以下操作:
这项技术使得每个人都无法使用通用下载链接,并且它阻止一个用户与其他用户共享下载链接。
此技术不会尝试辨别在浏览器URL栏中输入请求的人与来自iframe的请求或来自Javascript请求的人之间的区别,通常,不应该需要知道差异。任何可以通过这些方式获得的内容都可以使用相同的内容,因此只允许一种方式并阻止其他方式,没有真正的安全优势。
答案 1 :(得分:0)
这不是你用javascript解决的问题,因为那是在客户端运行的。当您有用户登录时,您需要在他们的jar中放置一个cookie,表示他们已登录。在您的网络服务器上,只允许人们访问具有该身份验证cookie的URL。
答案 2 :(得分:0)
首先,您需要为您的网站提供一些“登录系统”。然后你需要Apache Web服务器(或其他处理'重写mod'规则,但在Apache配置中是非常简单的[只是craete .htaccess文件])。
您需要做的就是阻止访问文件夹中的文件(并仅将其提供给已登录的用户)。
http://paste.ots.me/562452/text
(此 .htaccess 文件应将所有HTTP请求重定向到该文件夹 download.php )
http://paste.ots.me/562451/text
//由于未知原因,我无法在帖子中粘贴代码。