у меня есть файл на моем «веб-сайте/папке/файле», который я хотел бы перенаправить, чтобы пользователь не мог получить доступ к этому файлу без использования htaccess. Мой файл представляет собой огромную базу данных, содержащую URL-адреса, я не хочу, чтобы пользователи обращались к этому файлу, вводя прямой URL-адрес файла. Этот файл вызывается и используется моим расширением Chrome, которое блокирует доступ к пользователю, если он пытается получить доступ к одному из URL-адресов в этой БД. Проблема в том, что, набрав прямой URL-адрес этого файла, у нас есть доступ...
я пробовал все с файлом .htaccess, я знаю, что мы можем блокировать, перенаправлять и т. д. с файлом .htaccess, но если я перенаправляю или блокирую URL-адрес БД с помощью htaccess, мое расширение больше не работает, потому что БД заблокирована по файлу htaccess. поэтому я пытаюсь найти решение, может быть!
мой фон.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.info(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
})





Вы не можете реально сделать это. Вы не можете заблокировать ресурс, который должен быть общедоступным (вашим клиентским скриптом).
Потенциально вы можете сделать это небольшим Сильнее для тех, кому нужна ваша БД, возможно, отправив уникальный заголовок HTTP-запроса как часть вашего fetch(). Затем вы можете проверить наличие этого заголовка на стороне сервера (в .htaccess) и в противном случае заблокировать запрос. Это предотвращает запрос пользователем небрежно этого файла непосредственно в своем браузере. Тем не менее, любой, кто просматривает ваш сценарий (или отслеживает сетевой трафик), легко может обойти это, поскольку они могут создать запрос, имитирующий ваш сценарий. Но давайте не будем забывать, что ваш скрипт все равно загружает файл в браузер, поэтому его уже можно сохранить.
Вам нужно переосмыслить свою модель данных. Если вы не хотите, чтобы БД была общедоступной, она просто не может быть общедоступной. Вместо того, чтобы ваш скрипт загружал БД клиенту и обрабатывал запрос локально, вы можете отправить запрос на свой сервер. Затем ваш сервер выполняет необходимый поиск (в «скрытой» базе данных) и отправляет ответ. Затем ваш сценарий действует на этот ответ.
Не совсем. Не более сложное, чем ваше текущее решение, просто другое. Это требует небольшого количества сценариев на стороне сервера в дополнение к вашему JavaScript на стороне клиента.
Потому что я не знаю, как добиться этого с моим текущим background.js
На каком бите вы застряли конкретно? Вам, очевидно, нужно переписать свой сценарий background.js, но я не думаю, что основные принципы действительно отличаются. Вместо fetch() весь ваш файл БД в начале скрипта и использование JS для поиска URL-адреса. Вы fetch() свой сценарий на стороне сервера в прослушивателе событий и передаете URL-адрес либо в качестве параметра URL-адреса, либо в виде пользовательского заголовка. Ваш серверный скрипт (PHP, python, C#?) Затем просматривает URL-адрес в БД (если он «огромный», тогда вы получите лучшую производительность, используя реляционную БД) и отправляет ответ логический обратно клиенту.
да, база данных огромна, 5 МБ +300 000 URL-адресов хранятся в текстовом формате внутри файла .db, например: www.badurl01.com badurl01.com и т. д. Я рад, что существует решение моей проблемы, теперь я не знаю, как это сделать это со стороны сервера!
Спасибо за информацию, это сложно сделать?