2011-06-13 77 views
6

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

缩小位于www.example.com/min和我的脚本在www.example.com/scripts。我怎样才能阻止直接访问doc_root/scripts这是我的无名JavaScript文件所在的地方。我宁愿不把它们放在文档根目录下,但它是一个选项。

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

+1

什么问题阻止了直接访问应该解决? – 2011-06-13 20:05:18

+0

我在未完成的JavaScript代码中包含注释(与大多数人一样)。手动缩减我的代码来部署并确保我上传正确的版本是一种痛苦。我使用Minify自动执行此操作,但未经版本化的版本仍未公开。 – 2011-06-13 20:11:02

回答

9

你就不能使用.htaccess文件里面doc_root/scripts以防止通过HTTP访问都通过网络来.js文件?

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

所以在doc_root/scripts/.htaccess,沿

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

注意线的东西,在这种情况下,.htaccess文件事项的位置。

+0

谢谢,重写规则起作用了。我会接受这一次,所以让我。 – 2011-06-13 20:12:18

4

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

你应该记住,此代码,并留意使用JavaScript的意见,业务知识等

UPDATE:

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

order deny, allow 
deny from all 

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

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

我可以不在乎他们是否在缩小版本上握手。我知道任何足够认真的人都能理解他们。我只是宁愿他们在我的无名代码中看不到评论。 – 2011-06-13 20:04:26

+0

哦,我误读了。你只是想阻止源文件,而不是缩小的文件。我会更新我的答案。 – dtbarne 2011-06-13 20:06:21

+1

然后不要将原始版本保存在公共区域。将它们移动到文档根目录之外,如果不能这样做,请将它们放到“不可猜测的”子目录中,而不要在任何公共页面中引用它。 – 2011-06-13 20:06:40

0

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

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

或者其他类似的效果..

0

的唯一方法是检查参照网址,而不是每个人都将它们发送,或发送一个真正的一。换句话说,你不能阻止直接访问任何真正想要的东西的人。如果请求是直接请求或正在通过<script src=....>类型请求完成,则无法以100%的准确度来确定。

0

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

一个解决方案可能是模糊处理,这使得JavaScript代码难以阅读/理解,但最终用户将看到代码,并通过一些持久的逆向工程,它可以被去混淆。

我见过有人做的另一件事是创建一个“空的”js.html页面,并将其所有JavaScript插入到页面中的脚本标记(嵌入的,而不是外部的)中,并从他的主页中创建ann ajax请求到js.html并嵌入到页面的底部。这种方式有点不同,但用户在查看源代码时不会看到js,除非使用诸如萤火虫之类的开发工具。

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

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

+0

请参阅我的说明。 – 2011-06-13 20:15:35