记录--如何防止网站信息泄露(复制/水印/控制台)

这篇具有很好参考价值的文章主要介绍了记录--如何防止网站信息泄露(复制/水印/控制台)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助

记录--如何防止网站信息泄露(复制/水印/控制台)

一、前言

中午休息的时候,闲逛公司内网,看到一个url,就想复制一下url,看看url对应的内容是啥,习惯性使用ctrl+c,然后ctrl+v,最后得到是 禁止复制,哦,原来是禁用了复制。这能难倒一个前端开发吗?当然不能。于是打开了控制台,这时,发现页面自动执行了一段立即执行函数,函数体里面是debugger代码,然后手动跳过debugger后,页面已经变成一个空白页面了。

本文将简单讲解禁止复制、水印和禁止打开控制台三个功能点的实现。

前面几节是分功能讲解,最后一节将会写出完整的代码,如何防止网站信息泄露。

二、禁止复制

现在有的复制网页(常规网页用户,不开控制台的情况)的内容方式有:

  1. 选择 -> ctrl+c(command + c)
  2. 选择 -> 鼠标右键 -> 复制

js拦截

相比user-select无法做到某一些内容可以被选中

document.addEventListener('contextmenu', function(e) {  
    e.preventDefault();  
}, false);  

document.addEventListener('selectstart', function(e) {  
    e.preventDefault();  
}, false);

user-select

不难发现,当我们复制内容的时候,首选是选择目标内容,那我们可以禁用用户的选择目标内容。

css属性user-select用于控制用户是否能够选择(即复制)文本和其他页面元素。它的作用是指定用户在浏览网页时是否能够选择和复制页面上的文本和其他元素。

<h3>user-select: none;</h3>
<div style="user-select: none;">我是捌玖,欢迎关注我哟,这儿是利用css样式,测试能否禁用复制</div>
<div style="user-select: none;">哈哈哈,当然,这种方式是无效的,我只是玩下</div>

那user-select和pointer-event的区别是啥? pointer-events  指定在什么情况下 (如果有) 某个特定的图形元素可以成为鼠标事件的 target (en-US)。通俗一点讲,例如我们给某个元素设置了pointer-events: none,当我们点击这个元素的时候,是不会触发click事件,包括我们即使通过鼠标也无法选中该元素。
user-select 用于控制用户是否可以选择文本。这不会对作为浏览器用户界面(即 chrome)的一部分的内容加载产生任何影响,除非是在文本框中。

注意:user-select是无法拦截input中的选中(鼠标/ctrl+a)

拦截ctrl + a

每个人(系统)使用使用组合键进行复制,可能键是存在差异的,就拿我电脑是mac,默认是command + a为复制,当然是可以修改的,看个人使用习惯,所以我们要同时拦截掉ctrl + a 和 command + a。

document.keyDown = function(event) {
    const {ctrlKey, metaKey, keyCode} = event;
    if((ctrlKey || metaKey) && keyCode === 65) {
        return false;
    }
}

拦截ctrl+c(command + c)

每个人(系统)使用使用组合键进行复制,可能键是存在差异的,就拿我电脑是mac,默认是command + c为复制,当然是可以修改的,看个人使用习惯,所以我们要同时拦截掉ctrl + c 和 command + c的。不可以直接拦截c键的输入,会影响到input框的输入

document.keyDown = function(event) {
    const {ctrlKey, metaKey, keyCode} = event;
    if((ctrlKey || metaKey) && keyCode === 67) {
        return false;
    }
}

直接拦截鼠标右键

该方法直接拦截了右键菜单的打开,主要用于拦截图片的复制,菜单中的复制图片的方法有多种(复制图片、复制图片地址等),暂时没找到合适的方法拦截菜单中具体的某一项。

记录--如何防止网站信息泄露(复制/水印/控制台)

document.oncontextmenu = function(event){
    if(event.srcElement.tagName=="IMG"){
        alert('图片直接右键');
        return false;
    }
};

三、水印

网站水印的主要作用是版权保护和网站标识展示。具体来说,它可以在图片上加上作者的信息或标识,防止他人未经授权使用,有助于保护图片的版权安全。同时,它也可以在网页中展示特定的标识或信息,如网站的名称、网址、版权信息等,有助于提高网站的知名度和品牌形象。

此外,网站水印还可以用于追踪网站的非法使用和侵权行为。当发现某个网站上出现了未经授权的水印,就可以通过水印的信息追踪到该网站的使用者,从而采取相应的法律措施。

// 创建Canvas元素  
const canvas = document.createElement('canvas');  
const context = canvas.getContext('2d');  

// 设置Canvas尺寸和字体样式  
canvas.width = 100;  
canvas.height = 100;  
context.font = '30px Arial';  
context.fillStyle = 'rgba(0,0,0,0.1)';  

// 绘制文字到Canvas上  
context.fillText('捌玖', 10, 50);  

// 生成水印图像的URL  
const watermarkUrl = canvas.toDataURL();  

// 在页面上显示水印图像(或进行其他操作)  
const divDom = document.createElement('div');
divDom.style.position = 'fixed';
divDom.style.zIndex = '99999';
divDom.style.top = '-10000px';
divDom.style.bottom = '-10000px';
divDom.style.left = '-10000px';
divDom.style.right = '-10000px';
divDom.style.transform = 'rotate(-45deg)';
// 避免对用户的交互产生影响
divDom.style.pointerEvents = 'none';
divDom.style.backgroundImage = `url(${watermarkUrl})`;
document.body.appendChild(divDom);

四、禁止打开控制台

禁止用户打开控制台

  1. 防止代码被窃取:在控制台中,用户可以查看和修改网页的源代码,这可能会导致恶意用户窃取您的代码或敏感信息。通过禁止打开控制台,可以保护您的代码和数据不被未经授权的用户访问或篡改。
  2. 提高安全性:控制台是网页与用户之间进行交互的主要渠道之一,但也是潜在的安全风险之一。恶意用户可以利用控制台执行恶意代码、进行钓鱼攻击等。禁止用户打开控制台可以减少这些潜在的安全风险。
  3. 保护系统资源:在控制台中,用户可以执行各种操作,例如创建新文件、删除文件等,这可能会对系统资源造成不必要的占用和破坏。禁止打开控制台可以限制用户的操作范围,保护系统资源不被滥用。
  4. 防止误操作:控制台允许用户进行各种操作,但这也增加了误操作的风险。禁止打开控制台可以减少用户误操作的可能性,避免不必要的损失和风险。
let firstTime;
let lastTime;
setInterval(() => {
    firstTime = Date.now()
    debugger
    lastTime = Date.now()
    if (lastTime - firstTime > 10) {
        window.location.href = "about:blank";
    }
}, 100)

五、总结

    // 防止用户选中
    function disableSelect() {
        // 方式一,js拦截
        // 缺点: 无法做到某一些内容可以选中        
        document.onselectstart = function(event){
            e.preventDefault();
        };


        // 方式:给body设置样式
        document.body.style.userSelect = 'none';


        // 禁用input的ctrl + a
        document.keyDown = function(event) {
            const {ctrlKey, metaKey, keyCode} = event;
            if((ctrlKey || metaKey) && keyCode === 65) {
                return false;
            }
        }
    };

    // 禁用键盘的复制
    function disableCopy() {
        const {ctrlKey, metaKey, keyCode} = event;
        if((ctrlKey || metaKey) && keyCode === 67) {
            return false;
        }
    }

    // 禁止复制图片
    function disableCopyImg() {
        document.oncontextmenu = function(event){
            if(event.srcElement.tagName=="IMG"){
                alert('图片直接右键');
                return false;
            }
        };
    };

    // 生成水印
    function generateWatermark(keyword = '捌玖') {
         // 创建Canvas元素  
        const canvas = document.createElement('canvas');  
        const context = canvas.getContext('2d');  
        
        // 设置Canvas尺寸和字体样式  
        canvas.width = 100;  
        canvas.height = 100;  
        context.font = '30px Arial';  
        context.fillStyle = 'rgba(0,0,0,0.1)';  
        
        // 绘制文字到Canvas上  
        context.fillText(keyword, 10, 50);  
        
        // 生成水印图像的URL  
        const watermarkUrl = canvas.toDataURL();  
        
        // 在页面上显示水印图像(或进行其他操作)  
        const divDom = document.createElement('div');
        divDom.style.position = 'fixed';
        divDom.style.zIndex = '99999';

        // 因为div旋转了45度,所以div需要足够的大
        divDom.style.top = '-10000px';
        divDom.style.bottom = '-10000px';
        divDom.style.left = '-10000px';
        divDom.style.right = '-10000px';
        divDom.style.transform = 'rotate(-45deg)';

        // 防止对用户的交互产生影响
        divDom.style.pointerEvents = 'none';
        divDom.style.backgroundImage = `url(${watermarkUrl})`;
        document.body.appendChild(divDom);
    }

    // 禁止打开控制台
    function disbaleConsole() {
        let firstTime
        let lastTime
        setInterval(() => {
            firstTime = Date.now()
            debugger
            lastTime = Date.now()
            if (lastTime - firstTime > 10) {
                window.location.href = "about:blank";
            }
        }, 100);
    }

    disableSelect();
    disableCopy();
    disableCopyImg();
    generateWatermark();
    disbaleConsole();

本文转载于:

https://juejin.cn/post/7292416512333332534

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

 记录--如何防止网站信息泄露(复制/水印/控制台)文章来源地址https://www.toymoban.com/news/detail-776844.html

到了这里,关于记录--如何防止网站信息泄露(复制/水印/控制台)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何防止U盘复制电脑文件?

    在我们的工作中,经常需要将重要的文件存在电脑中,我们必须要妥善的保护这些重要数据,那么该如何防止U盘复制电脑中的文件呢? 要想防止U盘复制电脑文件,可从三个方面入手,分别是: 禁止电脑使用USB存储设备或只读USB存储设备; 文件数据禁止移动和复制; 将存放

    2024年02月08日
    浏览(23)
  • 一、CTF-Web-信息泄露(记录CTF学习)

    目录 1.源码泄露  1-1.页面源代码泄露  1-2.敏感文件泄露        1-2-1.备份(.swp/.bak/.beifen/~/phps等)        1-2-2.数据库(mdb)        1-2-3.压缩包(zip/tar.gz/rar/7z等)        1-2-4.路径(.git/.svn/.hg/.DS_Store/WEBINF/web.xml/cvs/Bazaar/bzr)      2.robots.txt泄露      3.404页面泄露

    2024年02月06日
    浏览(40)
  • 网站服务器 如何防止恶意爬虫抓取

    恶意的蜘蛛行为不光会造成服务器的压力,并且对seo没有实质性用处,下面就拿SemrushBot蜘蛛为例来说明如何防止恶意爬取 SemrushBot蜘蛛爬虫UA:\\\"Mozilla/5.0 (compatible; SemrushBot/6~bl; +http://www.semrush.com/bot.html)\\\" 1、SemrushBot蜘蛛抓取过多增加网站服务器负担 2、SemrushBot不会给网站带来实

    2023年04月10日
    浏览(42)
  • 详解如何防止dede网站DDos被攻击

    第一步:进入后台,系统-》添加新变量变量名称:cfg_anquan_cc 变量类型:布尔(Y/N) 参数说明:是否开启防CC攻击: 变量值:Y 第二步:编辑,/member/config.php 在require_once(DEDEINC.\\\'/dedetemplate.class.php\\\');下添加代码 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多

    2024年02月02日
    浏览(49)
  • 如何防止机器人或者爬虫访问自己的网站

    在网站的robots.txt文件中设置禁止机器人访问的页面或目录。 Robots.txt是一个文本文件,用于告诉搜索引擎哪些页面或目录不应该被访问。可以通过在robots.txt文件中添加\\\"Disallow\\\"指令来告诉机器人禁止访问某些页面或目录。例如: 上述例子中,我们禁止了所有机器人访问/admin

    2024年02月12日
    浏览(36)
  • HTTP劫持是什么?如何防止网站被劫持呢?

    HTTP劫持(HTTP hijacking)是一种网络攻击技术,攻击者通过各种手段截取用户的HTTP请求或响应,篡改其内容或重定向到恶意服务器,从而实施恶意活动。这种攻击可能导致用户信息泄露、身份盗窃、篡改网页内容或植入恶意代码等安全问题。 为了保护网站免受HTTP劫持的威胁,

    2024年02月08日
    浏览(40)
  • PDF添加水印以及防止被删除、防止编辑与打印

    方法记录如下: 1、添加水印; 2、打印输出成一个新的pdf; 3、将pdf页面输出成一张张的图片:(福昕pdf操作步骤如下) 4、将图片组装成一个新的pdf:(福昕pdf操作步骤如下)  5、对新生成的pdf设置权限: 打开Adobe Acrobat Pro,保护--使用密码进行保护,设置密码。可针对查

    2024年02月15日
    浏览(33)
  • 被通报?被下架?用户信息被泄露?APP安全合规风险该如何防范?

    前段时间,一个资讯类APP(以下称“某APP”)的负责人急匆匆找到网安云,直言其负责的APP最近收到很多用户投诉,说他们的信息被泄露了,屡遭电销骚扰。由于电销太过猖狂,导致很多用户都到应用市场给他们发差评,对品牌形象塑造和业务发展影响极大!   同时,他们也

    2024年02月05日
    浏览(35)
  • 如何防止别人蹭wifi 隐藏你的无线路由器信息的设置方法介绍

    如何防止别人蹭wifi?蹭网不但会影响你的上网速度,甚至会泄漏你的个人隐私。因此对于wifi使用者来说,光给无线路由器设置密码是不够的,要彻底的阻止偷网,最好还是要能够把路由器设置成隐藏,让别人搜索不到你的无线信号。如果想要上网只能通过添加无线网络信号

    2024年02月06日
    浏览(33)
  • 基于数据的安全与隐私保护:保护企业敏感数据,防止数据泄露

    作者:禅与计算机程序设计艺术 数据安全和数据隐私一直是企业最关注的问题之一。随着社会数据越来越多、使用越来越频繁,企业对数据安全和隐私保护越来越重视。在电子商务和互联网金融等新时代,传统的数据安全和隐私保护方法已经无法适应企业的需求,更需要新的

    2024年02月10日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包