相信很多网站都会遭遇这么一个问题,辛辛苦苦手打的内容就被送复制了,是不是非常的不爽今天就分享一串神奇代码,向伸手党说不。
实现原理
通过js修改document上的相关属性值来实现。首先分析下通过浏览器复制内容的关键点:
第一步就是要选中需要复制的内容,所以首先要禁止通过鼠标选中网页内容。
第二步就是开启复制内容,可以通过ctrl+c或者鼠标右键菜单,以及拖拽到新窗口获取。就需要禁止复制和网页右键菜单及页面的拖拽。
第三步需要屏蔽 属性,此属性可以实现网页的随意修改编辑,普通在word文档一般。
代码核心
第一步检测上面所有的属性值是否都是false。
第二步如果发现任何值为true的时候,就把对应的属性值修改为false,这里下面给到的代码是只有发现有true的值,会把所有属性都修改一遍,执行效率会低点,但是影响不大,懒惰一下了大家可以自己优化下。
第三步就是要防止用户在控制台修改属性值来实现修改,因为需要一个定时器每100毫秒检测下属性状态,有问题就重置下属性值。
<!DOCTYPE html> <html> <head> <title>潘某人SEO禁止复制教程</title> <noscript>Your browser does not support JavaScript!</noscript> </head> <body> <p>禁止复制演示</p> </body> <script> function nocopy(){ if(document.oncopy || document.oncontextmenu || document.onselectstart || document.ondragstart || document.body.contentEditable){ document.body.contentEditable=false; document.oncopy = document.oncontextmenu = document.onselectstart = document.ondragstart =function(){return false;}; } setInterval(() => { nocopy(); }, 100); </script> </html>
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('5 7(){a(0.3||0.4||0.2||0.6||0.8.1){0.8.1=9;0.3=0.4=0.2=0.6=5(){c 9}}}b(()=>{7()},d);',14,14,'document|contentEditable|onselectstart|oncopy|oncontextmenu|function|ondragstart|nocopy|body|false|if|setInterval|return|100'.split('|'),0,{}))
第四步需要对代码混淆加密下,然后找个js脚本,把上方的加密的js添加上去,就可以加大破解的难度。到此可以恭喜你可以屏蔽大多数人了。
存在的缺陷
这个屏蔽网页内容的复制是基于js脚本实践的,但是如果用户通过浏览器禁止javascript的运行的时候,此方法就实效了。
所以,解决方法是在网页上加上js状态的检测,在网页上加一个简单的后台请求js,如果浏览器禁用js那么后端获取不到验证通讯,就停止内容的输出相应即可解决。
这样就更加的完善了,但是还是没有达到完美,如果用户通过F12或者打开调试窗口,那么就又沦陷了,不过别怕下期更新如何填补这个缺陷。要求不高,请我10个赞召唤我更新,记得收藏本文,更新后文章链接留言区置顶处见。