JavaScript-有没有办法能防止盗用js?
我有一个网站,用php做了一个动态的页头页尾,以js的形式嵌套在站点的静态页上,有没有办法能防止别的网站引用我这个js?而只能使我自己站点的页面可以引用
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我有一个网站,用php做了一个动态的页头页尾,以js的形式嵌套在站点的静态页上,有没有办法能防止别的网站引用我这个js?而只能使我自己站点的页面可以引用
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(6)
一般有两步:
1.判断Referer是不是来自本站。
2.使用JS压缩工具: [JS压缩工具][1][1]: http://www.ostools.net/jscompress
我的办法是定义一些变量或属性(可以是 js 的也可以是 在html的属性),在你的位置的 页头或页脚上,在js用它,把一些核心函数引用变量或属性然后再 加密,这样基本上没人拷贝你的东西了。
js防盗链还是有点困难,毕竟是客户端代码。项目完成后把js和css压缩后传到服务器上,一方面可以优化页面,二来让增加别人理解的难度,特别是js。
不过话又说回来,要盗用你js函数或者方法的人技术很牛逼的少,牛逼的人还用看别人写的?
还有,我觉得没有必要防止盗链,以前有个高手看了我写的js,然后给我留言说有个地方的写法可以改进。
我所理解的盗用并不一定纯粹指盗链, 还包括直接拷贝JS,涉及侵犯知识产权方面。
JS是一种客户端脚本,要完全杜绝被盗用的现象很困难,但是可以采取一些方法增加被盗用和侵犯所有权的难度,比如:网站发布时对所有的JS进行混淆压缩,这样即使JS被盗用也比较难以理解代码逻辑(至少要弄明白被混淆过的JS要花非常多的精力)。
很抱歉,没有看清楚你问题的描述,只看标题,现在我来回答下你这个问题,
网站定义一个 privateKey
在每次响应页面的时候生成一个值,生成值的方式如下:
$str = md5(privateKey . date('Ymdhi'));
将这个值写到页面引入js的那个地方,
<script type="text/javascript" src="http://www.xxx.com/test.php?str=<?php echo $str;?>"></script>
在文件test.php中获取str,并且验证:
if(!isset($_GET['str']) || md5(privateKey . date('Ymdhi')) != $_GET['str']){
exit();
}
....... 这里还继续写你之前的逻辑
方法说明: 即使盗链也不知道str该传什么值,即使知道也不知道你str的生成规则,即使知道你的str是由 key + time 生成也不知道 你的private 的值是什么。还有加time的意义就是让别这个值不唯一,从而让别人无规律可循,time 只精确到了 分钟,相信页面加载到引那个js的时间不会超过 1 分钟。。
这个方法用于防止普通的js外链,呵呵,先留着吧。
可以试试下边的方法:
if(window.location.host.indexOf('.xxx.com') == -1) {
alert('该js文件禁止盗链..');
window.location.href = 'http://www.xxx.com';
}
在js文件的头部加入以上代码, www.xxx.com 是指你网站的域名。
只要进入if块中,随便你处理,我的做法是 提示,并且跳转到www.xxx.com下。。
=========================================================
上面的做法已经说的很不错,思路也很好。我谈一些简单的改进措施。
加密链的生成部分:
$str = md5(privateKey . time());
可能稍微好一点,time()是unix时间戳,是按秒变化的。
另外如果你用可解密的算法进行加密,便可以在一个 php文件里面同时管理多个js的调用了。
上面说的js部分的思路也可以。不过可以做一些改进,
例如具窍其中的 alert(), 进行 js压缩, 将域名变成字符拼接而成或者用 字符code。
也可以将这些操作包装成一个函数,在多个部位调用。
这些已经很大的加大了盗用的难度。
不过建议楼主,可以在代码中加上一些作者信息,如果真的有很多人需要,可以考虑分享这些代码,可以写博客与其他人交流探讨。有时候,分享也是一种很不错的事情。
可以通过在HTTP请求的Referer来判断是不是来自你网站的域名,从而达到防盗的效果,当然Http的Referer也是可以伪造的,达到完全的防盗链是不太可能的,以下是通过PHP自身来判断客户端的Referer,当然也可以通过WebServer的ReWrite来限制访问。
<?php
if($_SERVER["HTTP_REFERER"] != 'www.abc.com'){
echo "请勿盗链网页";
}else{
//程序代码
}
?>