我在“网站/文件夹/文件”上有一个文件,我想重定向该文件以防止用户不使用htaccess来访问该文件。 我的文件是一个包含URL的巨大数据库,我不希望用户通过键入文件的直接URL来访问该文件。 该文件被我的chrome扩展程序称为&使用,如果用户尝试访问该数据库中的某个网址,该文件将阻止对用户的访问。 问题是通过键入我们有权访问的文件的直接URL ...
我尝试使用.htaccess文件进行所有操作,我知道我们可以使用.htaccess文件进行阻止,重定向等操作,但是如果我使用htaccess重定向或阻止数据库的URL,我的扩展名将不再起作用,因为htaccess文件阻止了DB。 所以我想找到一个解决方案,也许是一个!
我的background.js
'use strict';
let db = []; // session Global
// ----- parse & cache the database data
fetch('http://thmywebsite.com/folder/db.dat')
.then(response => response.text())
.then(text => { db = text.trim().split(/[\r\n]+/); })
.catch(error => console.log(error));
chrome.webRequest.onBeforeRequest.addListener(details => {
let url = new URL(details.url);
return { cancel: url && url.hostname && db.includes(url.hostname) };
},
{ urls: ["http://*/*", "https://*/*"] },
["blocking"]
);
chrome.extension.isAllowedIncognitoAccess(function (isAllowedAccess) {
if (isAllowedAccess) return; // Great, we've got access
})
答案 0 :(得分:0)
您实际上无法做到这一点。您不能阻止需要公开使用的资源(通过客户端脚本)。
通过将唯一的HTTP请求标头作为您fetch()
的一部分,您可能会使想要DB的人变得有点困难。然后,您可以检查此标头服务器端是否存在(在.htaccess
中),否则将阻止该请求。这样可以防止用户直接在浏览器中偶然请求此文件。但是,对于任何查看您的脚本(或监视网络流量)的人来说,绕开它都是微不足道的,因为他们可以构造模拟您的脚本的请求。但是请不要忘记,您的脚本无论如何都会将文件下载到浏览器-因此该文件已经存在,任何人都可以保存。
您需要重新考虑数据模型。如果您不希望该数据库是可公开访问的,那么它就不能公开访问。您可以将请求发送到服务器,而不是将数据库下载到客户端并在本地处理请求的脚本。然后,您的服务器(在“隐藏”数据库上)执行必要的查找并发送回响应。然后,您的脚本将对此响应起作用。