🥰前言

当时备战面试的我,打开鱼皮 的 面试鸭,正畅游在知识的海洋,看到这段 HashMap 原理的解释写的也是非常的棒!
顺手准备粘给小美,分享知识,促进这段纯洁的友谊...


我小手一划拉,ctrl+c一按,拿捏... 坏了天塌了,这怎么复制不了。
我的心情从 36.6度 瞬间跌倒了 -18.8 度!

鱼皮这厮气煞我也!
😡学习

开始学习💪💪💪 我去去就回
网页内容防复制
网页内容防复制 是一种前端保护技术,通过 HTML、CSS、JavaScript、遮罩层或 Canvas 等手段,限制用户选中、复制或右键操作,防止文本、图片等被轻易获取。其目的在于提高内容盗用门槛、保护原创版权和减少爬虫抓取,虽然不能彻底防止复制,但能有效提升操作难度与合规性。

大家可以打开演示站,看看你能破解几层
遇到困难,回到这里,大家接着向下看,也能迎刃而解
🙂↕️🙂↕️🙂↕️
最后可以试试终极版哦

1. HTML 层
通过 HTML 属性 直接限制用户行为,比如禁止右键等操作。
🔹原理
利用内联事件属性拦截浏览器默认行为。
🔹示例代码
            
            
              html
              
              
            
          
          <body oncontextmenu="return false;">
  <p>右键菜单已被禁用!</p>
</body>🔹效果

🔹破解

在 F12 控制台中,禁用 JavaScript
2. CSS 层
通过 CSS 属性控制用户交互行为。
🔹原理
CSS 提供 user-select 来限制选中行为。
🔹示例代码
            
            
              html
              
              
            
          
          <style>
  .no-select {
    user-select: none;        /* 禁止文本选中 */
    -webkit-user-select: none;
    -moz-user-select: none;
  }
</style>
<p class="no-select">这段文字无法被选中。</p>🔹效果

- 鼠标拖拽无法选中;
- Ctrl+A无法全选。
🔹破解

3. JavaScript 层
通过事件监听阻止键盘、复制、右键等操作。
🔹原理
监听 copy、keydown、contextmenu 等事件并阻止默认行为。
🔹示例代码
            
            
              html
              
              
            
          
          <script>
  document.addEventListener('contextmenu', e => e.preventDefault());  // 禁右键
  document.addEventListener('copy', e => e.preventDefault());         // 禁复制
  document.addEventListener('keydown', e => {
    if (e.ctrlKey && (e.key === 'c' || e.key === 'a')) e.preventDefault(); // 禁 Ctrl+C/A
  });
</script>
<p>此区域无法右键、无法复制、无法全选。</p>🔹效果

- 禁用右键、Ctrl+C、Ctrl+A;
- 防止复制到剪贴板。
🔹破解
 在 F12 控制台中,
 在 F12 控制台中,禁用 JavaScript
💡注意:
在网页防复制体系中,HTML、CSS、JavaScript 三层之间既独立又互相交叉:
- HTML 层负责网页结构,是最基础的行为控制层(如禁止右键、禁止选中)。
- CSS 层负责视觉与交互样式,可在界面层面限制选中或拖拽。
- JavaScript 层则是逻辑控制核心,通过事件监听进一步强化限制。
三者共同形成"由浅入深、逐级增强"的防护体系。
我之所以按这三层递进编排,是为了让读者能从最直观的 HTML 属性入门,再理解 CSS 的交互约束,最后掌握 JS 的动态防护逻辑,从而清晰地看到前端防复制机制的层级演进与逻辑递进
4. DOM 操作层
在页面上添加透明层覆盖真实内容,使鼠标无法选中或右键。
🔹原理
添加一个全屏透明遮罩层,阻止交互事件传递到下方内容。
🔹示例代码
            
            
              html
              
              
            
          
          <style>
  .mask {
    position: fixed;
    top: 0; left: 0;
    width: 100vw; height: 100vh;
    z-index: 9999;
    background: rgba(0,0,0,0);
  }
</style>
<p>被透明遮罩层覆盖的文字,无法选中、复制或右键。</p>
<div class="mask"></div>🔹效果

- 视觉上仍能看到内容;
- 实际上所有鼠标事件被遮罩层拦截。
🔹破解

破坏删除遮罩层
5. 渲染层
通过 Canvas 或 SVG 绘制文字,将文本转换为图像或路径,从根本上防止复制。
🔹原理
文字不再存在于 DOM 树中,而是以像素或矢量形式绘制。
🔹示例代码
            
            
              ini
              
              
            
          
          <canvas id="textCanvas" width="400" height="100"></canvas>
<script>
  const ctx = document.getElementById('textCanvas').getContext('2d');
  ctx.font = '24px Arial';
  ctx.fillText('这段文字是用 Canvas 绘制的,无法直接复制', 10, 50);
</script>🔹效果

- 页面上看起来是文字,但其实是图像像素;
- 无法选中或搜索到文字内容。
🔹破解
截图使用 OCR识别

✅ 总结表
| 层级 | 技术手段 | 示例特征 | 防护强度 | 
|---|---|---|---|
| HTML 层 | 内联事件 | 禁右键、禁选中 | ⭐ | 
| CSS 层 | user-select: none | 无法选中 | ⭐⭐ | 
| JavaScript 层 | 监听事件阻断 | 禁复制、禁快捷键 | ⭐⭐ | 
| DOM 操作层 | 透明遮罩层 | 鼠标无法交互 | ⭐⭐⭐ | 
| 渲染层 | Canvas/SVG 绘图 | 源码无文字 | ⭐⭐⭐⭐ | 
😤破解
经历一套完整流程,现在来轻松拿捏小网站。
第一步

- 先打开 F12 控制台
- 再输入目标网址进入
第二步

该网站其实就是用 user-select 来限制选中行为,在控制台中去除就可以复制了。
🥲结局

