禁止复制内容 🤔 那点事~

🥰前言

当时备战面试的我,打开鱼皮面试鸭,正畅游在知识的海洋,看到这段 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 层

通过事件监听阻止键盘、复制、右键等操作。

🔹原理

监听 copykeydowncontextmenu 等事件并阻止默认行为。

🔹示例代码
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 控制台中,禁用 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 来限制选中行为,在控制台中去除就可以复制了。

🥲结局

相关推荐
q***T5831 小时前
GitHub星标20万+的React项目,学习价值分析
前端·学习·react.js
合作小小程序员小小店1 小时前
web开发,在线%药店管理%系统,基于Idea,html,css,jQuery,java,ssm,mysql。
java·前端·mysql·jdk·html·intellij-idea
ClassOps1 小时前
Chrome 插件记录
前端·chrome
笙年1 小时前
Vue 作用域插槽
前端·javascript·vue.js
鹏北海2 小时前
从“版本号打架”到 30 秒内提醒用户刷新:一个微前端团队的实践
前端·面试·架构
stormsha2 小时前
CSS 样式美学从基础语法到界面精筑的实战宝典
前端·css·postcss·设计语言
yqcoder2 小时前
css 中,backdrop-filter: blur(10px) 作用
前端·css
一点一木2 小时前
国内首款原生视觉编程模型实测:Doubao-Seed-Code 前端 Agent 从零完成像素画编辑器
前端·人工智能·agent
SoaringHeart3 小时前
Flutter组件封装:标签拖拽排序 NDragSortWrap
前端·flutter
zeijiershuai3 小时前
Vue 工程化、ElementPlus 快速入门、ElementPlus 常见组件-表格组件、ElementPlus常见组件-分页条组件
前端·javascript·vue.js