Как я могу заблокировать прямой доступ к моим файлам JavaScript? - PullRequest
6 голосов
/ 14 июня 2011

Я использую Minify для минимизации и кэширования всех моих запросов скриптов. Я хочу, чтобы только мои пользователи могли иметь доступ к минимизированным версиям файлов JavaScript.

Minify лежит на www.example.com/min, а мои скрипты на www.example.com/scripts.Как я могу заблокировать прямой доступ к doc_root/scripts, где лежат мои незавершенные файлы JavaScript.Я бы предпочел не выводить их из корня документа, но это вариант.

Обратите внимание, что я использую Zend Framework, поэтому фактический корень моего приложения смещен на www.example.com/public.Файл htaccess обрабатывает перезапись.

Ответы [ 5 ]

10 голосов
/ 14 июня 2011

Разве вы не можете просто использовать файл .htaccess внутри doc_root/scripts, чтобы запретить весь доступ через Интернет к .js файлам по HTTP?

Это не остановит минификацию, поскольку это обеспечивает косвенный доступ.

Так что в doc_root/scripts/.htaccess что-то вроде

<Files ~ "\.js$">
    order allow,deny
    deny from all
</Files>

Обратите внимание, что расположение файла .htaccess в этом случае имеет значение.

5 голосов
/ 14 июня 2011

Вы фактически не можете заблокировать код конечного пользователя.Даже если вы обслужили его с помощью PHP или другого серверного языка и заблокировали прямые запросы, конечно, все же возможно прочитать его напрямую с помощью ряда инструментов.

Вы должны помнить об этом и помнить окомментарии javascript, знание бизнеса и т. д.

ОБНОВЛЕНИЕ:

Однако, если вы говорите о коде, к которому конечный пользователь никогда не должен обращаться, вы можете, как и выВы можете удалить его из корневого каталога сервера или заблокировать файлы в вашем каталоге (или в целом каталоге).Это просто с Apache .htaccess.

order deny, allow
deny from all

Вы также можете перенаправить исходные файлы в минимизированные версии с помощью mod_rewrite в вашем файле .htaccess.

RewriteEngine On
RewriteRule /scripts/(.*)$ /min/$1 [L,NC]
0 голосов
/ 14 июня 2011

Для того, чтобы ваш Javascript действительно работал, браузер пользователя должен в конечном итоге прочитать его. Таким образом, нет никакого реального способа «заблокировать» доступ к вашей папке скриптов (если быть точным, вы можете, но это сломает ваш сайт, так как браузер не увидит файлы для их запуска).

может быть одним из решений запутывания, что делает Javascript код труднее читать / понять, но в конечном счете, пользователь увидит код, и с немного настойчив обратной инженерии может быть де-обфусцированный.

Еще одна вещь, которую я видел, что кто-то делает, - это создание «пустой» страницы js.html и вставка всего его javascript в теги скрипта на странице (встроенные, а не внешние), и со своей главной страницы делает запрос ann ajax js.html и вставьте его внизу страницы. своего рода обход, но пользователь не увидит js при просмотре источника, если не использует инструменты разработчика, такие как firebug.

Обратите внимание, что последний вариант также может вызвать некоторую задержку в зависимости от количества загружаемого кода. но здесь ключ не блокирует доступ к вашим сценариям, а просто усложняет их получение / чтение / копирование.

Редактировать: упс, неправильно прочитал. Я думаю, что лучшим решением в этом случае было бы пойти с файлом htaccess в вашей папке сценариев, запрещающим любой доступ

0 голосов
/ 14 июня 2011

Единственный способ - проверить рефереров, и не каждый отправляет их или отправляет реальный.Другими словами, вы не можете заблокировать прямой доступ любому, кто действительно чего-то хочет.Невозможно со 100% точностью определить, является ли запрос прямым или выполняется через запрос типа <script src=....>.

0 голосов
/ 14 июня 2011

Зависит от сервера, который вы используете.Предполагая, что это Apache, вы можете добавить это в ваш файл .htaccess:

<Directory ~ "\scripts">
Order allow,deny
Deny from all
</Directory>

или что-то на этот счет ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...