如何阻止对我的 JavaScript 文件的直接访问?

IT技术 php javascript minify
2021-03-08 04:44:39

我使用 Minify 来缩小和缓存我所有的脚本请求。我只希望我的用户能够访问 JavaScript 文件的缩小版本。

缩小位于 ,www.example.com/min我的脚本位于www.example.com/scripts如何阻止直接访问doc_root/scripts我未压缩的 JavaScript 文件所在的位置。我宁愿不将它们从文档根目录中删除,但这是一个选项。

请注意,我使用的是 Zend Framework,因此我的应用程序的实际根目录已转移到www.example.com/public. htaccess 文件处理重写。

6个回答

难道你不能只在里面使用一个 .htaccess 文件doc_root/scripts来阻止所有通过网络访问.jsHTTP 文件吗?

它不会停止缩小,因为它提供了间接访问。

所以在doc_root/scripts/.htaccess,类似的东西

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

请注意,.htaccess在这种情况下文件的位置很重要。

谢谢,重写规则有效。一旦让我,我会接受这个。
2021-05-05 04:44:39

您无法有效地阻止面向最终用户的代码。即使您使用 PHP 或其他服务器端语言为其提供服务并阻止直接请求,当然仍然可以使用多种工具直接读取它。

您应该牢记这一点进行编码,并注意 JavaScript 注释、业务知识等。

更新:

但是,如果您谈论的是最终用户永远不需要访问的代码,您可以像您提到的那样将其移出服务器根目录,或者您可以阻止目录中的文件(或整个目录)目录)。使用 Apache 的 .htaccess 很容易。

order deny, allow
deny from all

您还可以使用 .htaccess 文件中的 mod_rewrite 将源文件重定向到缩小版本。

RewriteEngine On
RewriteRule /scripts/(.*)$ /min/$1 [L,NC]
我不太关心他们得到缩小版本的手。我知道任何有足够决心的人都能理解它们。我宁愿他们看不到我未压缩代码中的注释。
2021-04-23 04:44:39
然后不要将原始未挖掘的版本保存在可公开访问的区域。将它们移到文档根目录之外,如果您不能这样做,请将它们放入“不可猜测”的子目录中,并且不要在任何公开页面中引用它。
2021-04-28 04:44:39
哦,我看错了。您只想阻止源文件,而不是缩小的文件。我会更新我的答案。
2021-05-02 04:44:39

取决于您使用的服务器。假设它是 Apache,您可以将其添加到您的 .htaccess 文件中:

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

或类似的东西..

唯一的方法是检查引用,而不是每个人都发送它们,或者发送一个真实的。换句话说,您无法阻止对真正想要某样东西的任何人的直接访问。不可能 100% 准确地确定请求是直接请求还是通过<script src=....>类型请求完成。

为了让您的 Javascript 真正运行,用户的浏览器最终必须能够读取它。因此,没有真正的方法来“阻止”对您的脚本文件夹的访问(准确地说,您可以,但这会破坏您的网站,因为浏览器不会看到文件以运行它们。)

一种解决方案可能是混淆,这会使 javascript 代码更难阅读/理解,但最终用户会看到代码,并且通过一些坚持不懈的逆向工程可以对其进行去混淆。

我见过有人做的另一件事是创建一个“空”的 js.html 页面,并将他们所有的 javascript 插入页面中的脚本标签(嵌入,而不是外部),然后从他的主页向 js.html 发出 ann ajax 请求并将其嵌入页面底部。有点绕,但用户在查看源代码时不会看到 js,除非使用诸如 firebug 之类的开发工具。

请注意,最后一个选项也可能会导致一些延迟,具体取决于您正在加载的代码量。但这里的关键不是阻止访问您的脚本,而是让它们更难获取/读取/复制。

编辑:oop,也误读了。我认为在这种情况下最好的解决方案是在脚本文件夹中使用 htaccess 文件拒绝所有访问