Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何允许脚本读取javascript文件,但阻止用户直接查看该文件?_Javascript_.htaccess - Fatal编程技术网

如何允许脚本读取javascript文件,但阻止用户直接查看该文件?

如何允许脚本读取javascript文件,但阻止用户直接查看该文件?,javascript,.htaccess,Javascript,.htaccess,我有一个主javascript文件(比如main.js),它从其他javascript文件调用的不同函数中获取值。我想要的是,一旦索引页面或任何其他页面或脚本调用main,main就应该能够正常工作,但是如果用户试图查看其中的内容,他们将无法访问其中写入的内容(否则它将返回禁止的错误)。此外,在搜索了很长时间后,我知道可以使用.htaccess来执行此操作,因此我已经尝试了以下两种方法: 方法1: Order Allow,Deny Deny from all 当从任何地方调用主java

我有一个主javascript文件(比如main.js),它从其他javascript文件调用的不同函数中获取值。我想要的是,一旦索引页面或任何其他页面或脚本调用main,main就应该能够正常工作,但是如果用户试图查看其中的内容,他们将无法访问其中写入的内容(否则它将返回禁止的错误)。此外,在搜索了很长时间后,我知道可以使用.htaccess来执行此操作,因此我已经尝试了以下两种方法:

方法1:

Order Allow,Deny    
Deny from all
当从任何地方调用主javascript文件时,它只会停止要加载的主javascript文件,并且完全停止运行。虽然它阻止用户直接查看它

方法2:

RewriteEngine on    
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com [NC]    
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com.*$ [NC]    
RewriteRule \.(js)$ - [F]    
这实际上是可行的,但用户仍然可以在尝试访问时第一次访问它。在第1次尝试阻止对该文件的访问并显示禁止的错误后,停止每一次尝试,直到主站点再次打开或刷新。因此,任何人都可以在不断刷新网站主页并从中访问代码后看到my main.js


我需要知道如何正确地实现这一点?与此类似,当任何其他页面或脚本调用该脚本时,该脚本应该可以正常工作,但用户实际上看不到其中的内容。另外,我对htaccess了解不多,所以如果能提供一个详细解释的版本,我将不胜感激。

真的没有万无一失的方法来防止这种情况发生。本质上,服务器发送.js文件以响应http请求。您可以在服务器端对文件进行安全保护,但这只会阻止未经适当授权的用户下载该文件。一旦用户获得授权,服务器将允许将其下载到客户端。服务器无法阻止客户端应用程序(浏览器或其他)在客户端收到文件后允许用户查看该文件


作为一种选择,您可能需要考虑在.js文件上使用混淆器。这使得人们即使查看代码也很难破译代码。

您可以在devtools的“网络”和“源”选项卡中查看页面使用的任何JS文件的源代码,而无需第二次加载它。。。简言之,你是在问不可能的事。同意丹的观点。我曾经使用这种方法来提供一个虚假的JS文件,如果推荐人不在场,在IE6天内工作得很好!直到Devtools出现!我的新方法是通过AJAX请求加载和评估JS代码,因此用户不必直接加载链接就无法在devtools中查看代码,而引用者将不存在。有了一个足够好的假货,罪犯就会被愚弄。这意味着我们不可能将上面显示的这两种方法结合起来,然后创建一个更好的方法?我如何通过AJAX实现同样的效果?对不起,我只是一个新手与这些条款,所以将需要时间!感谢您的快速响应,但我相信这可以通过正确格式化htaccess文件来实现。另外,我想了解更多关于模糊处理程序的信息,比如它的功能以及如何获得所需的结果?.htaccess不会满足您的要求。就混淆器而言,有几种。只需谷歌“javascript模糊器”,你就可以对它们进行一些研究。同样,通过使用模糊器,代码是否仍然可以被任何其他脚本访问?被模糊处理的主脚本是否仍然能够检索以前被调用的任何其他脚本中声明的变量值?是的,模糊处理程序将把变量和函数名重命名为无意义的字符串。它还可以将代码的逻辑置乱为等价的、但复杂的东西,这样就没有人能够简单地通过阅读来理解代码的功能。除此之外,它仍然是一个完全有效的.js文件,在逻辑上与原始文件完全等效。请看,我在我的js文件中使用此方法加载另一个js,使其目录泄漏到一定程度:var wts=document.createElement('script');wts.type='text/javascript';wts.async=true;wts.src=('https:'==document.location.protocol?'https://':'http://')+document.location.hostname+'/myscript.js';var s=document.getElementsByTagName('script')[0];s、 parentNode.insertBefore(wts,s);那么这个混淆器会处理这个调用吗?