有没有办法能防止盗用js?

我有一个网站,用php做了一个动态的页头页尾,以js的形式嵌套在站点的静态页上,有没有办法能防止别的网站引用我这个js?而只能使我自己站点的页面可以引用

评论 (1)链接2012-02-08 
  • 0 支持
    很抱歉,开始没有看清楚你问题的描述。。 – 冯义军 2012-02-09

可以通过在HTTP请求的Referer来判断是不是来自你网站的域名,从而达到防盗的效果,当然Http的Referer也是可以伪造的,达到完全的防盗链是不太可能的,以下是通过PHP自身来判断客户端的Referer,当然也可以通过WebServer的ReWrite来限制访问。
<?php
if($_SERVER["HTTP_REFERER"] != 'www.abc.com'){

  
echo "请勿盗链网页";

}else{

  
//程序代码

}
?>

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (2)链接 • 2012-02-08
  • 0 支持
    算是一个答案吧,其实我还想问别人伪造REFERER,怎么办,这个比较容易伪造 – 何远伦 2012-02-09
  • 0 支持
    伪造Referer是很难杜绝的,到目前为止还没有见过能真正把伪造的Referer拒之门外的。 – 浪际天涯 2012-02-09

很抱歉,没有看清楚你问题的描述,只看标题,现在我来回答下你这个问题,

网站定义一个 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。
也可以将这些操作包装成一个函数,在多个部位调用。

这些已经很大的加大了盗用的难度。

不过建议楼主,可以在代码中加上一些作者信息,如果真的有很多人需要,可以考虑分享这些代码,可以写博客与其他人交流探讨。有时候,分享也是一种很不错的事情。

张文博
张文博
15
编辑于 2012-10-04
该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (3)链接 • 2012-02-09
  • 0 支持
    那别人把JS下载下来然后删掉上面那几行代码不就可以用了? – zhupp 2012-02-22
  • 0 支持
    那就不属于盗链了。 – 冯义军 2012-02-22
  • 0 支持
    很不错,采用密钥的方法,可以精确到时,避免加载超过1分钟的情况 – lechie 2012-10-12
  • 社区维基

    2 票

  • 渊岳
    60

js防盗链还是有点困难,毕竟是客户端代码。项目完成后把js和css压缩后传到服务器上,一方面可以优化页面,二来让增加别人理解的难度,特别是js。
不过话又说回来,要盗用你js函数或者方法的人技术很牛逼的少,牛逼的人还用看别人写的?
还有,我觉得没有必要防止盗链,以前有个高手看了我写的js,然后给我留言说有个地方的写法可以改进。

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-07-18

我所理解的盗用并不一定纯粹指盗链, 还包括直接拷贝JS,涉及侵犯知识产权方面。
JS是一种客户端脚本,要完全杜绝被盗用的现象很困难,但是可以采取一些方法增加被盗用和侵犯所有权的难度,比如:网站发布时对所有的JS进行混淆压缩,这样即使JS被盗用也比较难以理解代码逻辑(至少要弄明白被混淆过的JS要花非常多的精力)。

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (1)链接 • 2012-07-18
  • 0 支持
    “要完全杜绝被盗用的现象很困难”,我觉得不是很困难,是做不到。既然要盗用,你能用,别人复制下来的代码也能用,再怎么混淆代码,我不用明白写的啥,能用就行。呵呵~ – 冯义军 2012-07-18

一般有两步:
1.判断Referer是不是来自本站。
2.使用JS压缩工具: [JS压缩工具][1][1]: http://www.ostools.net/jscompress

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-10-07
  • 社区维基

    0 票

  • 望舒
    26

我的办法是定义一些变量或属性(可以是 js 的也可以是 在html的属性),在你的位置的 页头或页脚上,在js用它,把一些核心函数引用变量或属性然后再 加密,这样基本上没人拷贝你的东西了。

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-10-05

不是您所需,查看更多相关问题与答案

德问是一个专业的编程问答社区,请 登录注册 后再提交答案