Мне нужно перенаправить файл с сервера в папку без htaccess

у меня есть файл на моем «веб-сайте/папке/файле», который я хотел бы перенаправить, чтобы пользователь не мог получить доступ к этому файлу без использования 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
})
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
57
1

Ответы 1

Вы не можете реально сделать это. Вы не можете заблокировать ресурс, который должен быть общедоступным (вашим клиентским скриптом).

Потенциально вы можете сделать это небольшим Сильнее для тех, кому нужна ваша БД, возможно, отправив уникальный заголовок HTTP-запроса как часть вашего fetch(). Затем вы можете проверить наличие этого заголовка на стороне сервера (в .htaccess) и в противном случае заблокировать запрос. Это предотвращает запрос пользователем небрежно этого файла непосредственно в своем браузере. Тем не менее, любой, кто просматривает ваш сценарий (или отслеживает сетевой трафик), легко может обойти это, поскольку они могут создать запрос, имитирующий ваш сценарий. Но давайте не будем забывать, что ваш скрипт все равно загружает файл в браузер, поэтому его уже можно сохранить.

Вам нужно переосмыслить свою модель данных. Если вы не хотите, чтобы БД была общедоступной, она просто не может быть общедоступной. Вместо того, чтобы ваш скрипт загружал БД клиенту и обрабатывал запрос локально, вы можете отправить запрос на свой сервер. Затем ваш сервер выполняет необходимый поиск (в «скрытой» базе данных) и отправляет ответ. Затем ваш сценарий действует на этот ответ.

Спасибо за информацию, это сложно сделать?

imothep85 10.02.2019 23:54

Не совсем. Не более сложное, чем ваше текущее решение, просто другое. Это требует небольшого количества сценариев на стороне сервера в дополнение к вашему JavaScript на стороне клиента.

MrWhite 11.02.2019 00:12

Потому что я не знаю, как добиться этого с моим текущим background.js

imothep85 11.02.2019 00:23

На каком бите вы застряли конкретно? Вам, очевидно, нужно переписать свой сценарий background.js, но я не думаю, что основные принципы действительно отличаются. Вместо fetch() весь ваш файл БД в начале скрипта и использование JS для поиска URL-адреса. Вы fetch() свой сценарий на стороне сервера в прослушивателе событий и передаете URL-адрес либо в качестве параметра URL-адреса, либо в виде пользовательского заголовка. Ваш серверный скрипт (PHP, python, C#?) Затем просматривает URL-адрес в БД (если он «огромный», тогда вы получите лучшую производительность, используя реляционную БД) и отправляет ответ логический обратно клиенту.

MrWhite 11.02.2019 00:42

да, база данных огромна, 5 МБ +300 000 URL-адресов хранятся в текстовом формате внутри файла .db, например: www.badurl01.com badurl01.com и т. д. Я рад, что существует решение моей проблемы, теперь я не знаю, как это сделать это со стороны сервера!

imothep85 11.02.2019 01:16

Другие вопросы по теме