Как заблокировать прямой доступ к файлам JavaScript?

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

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

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

5 ответов


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

Он не остановится minify, так как это обеспечивает косвенные открыть.

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

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

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


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

вы должны кодировать с учетом этого и быть внимательными с комментариями javascript, бизнес-знаниями и т. д.

обновление:

однако, если вы говорите о коде, который никогда не должен быть доступен конечному пользователю, вы можете упомянутый переместите его из корня сервера, или вы можете заблокировать файлы в своем каталоге (или весь каталог). С Apache это легко .реврайт.

order deny, allow
deny from all

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

RewriteEngine On
RewriteRule /scripts/(.*)$ /min/ [L,NC]

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

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

или что-то в этом роде..


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


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

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

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

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

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