0%

点击劫持(Clickjacking)攻击与防御详解

点击劫持是一种隐蔽的前端攻击手段,攻击者通过巧妙的页面布局欺骗用户,使其在不知情的情况下点击恶意链接或执行非预期操作。这种攻击利用了浏览器对 iframe 的嵌套支持,具有较强的迷惑性。以下从攻击原理、危害及防御措施展开说明。

点击劫持的攻击原理

点击劫持的核心是通过透明图层覆盖合法页面,诱导用户点击,具体流程如下:

  1. 构造恶意页面:攻击者创建一个页面,通过 iframe 嵌套目标网站(如银行、社交平台等含有敏感操作的页面),并将 iframe 设置为透明opacity: 0)。
  2. 覆盖视觉元素:在恶意页面上放置诱骗性内容(如 “领取红包”“点击抽奖” 等按钮),位置与 iframe 中目标网站的敏感操作按钮(如 “转账”“确认支付”)完全重合。
  3. 诱导用户点击:用户看到的是恶意页面的诱骗内容,点击时实际点击的是透明 iframe 中的目标网站按钮,从而在用户不知情的情况下触发敏感操作(如确认转账、授权登录)。

示例场景
攻击者制作一个 “免费领取会员” 的页面,透明 iframe 嵌套某支付平台的 “确认付款” 页面,用户点击 “领取” 时,实际触发了支付平台的付款操作。

点击劫持的危害

  • 非授权操作:用户在不知情的情况下执行敏感操作(如转账、修改密码、授权第三方应用)。
  • 隐私泄露:诱导用户点击后,可能触发个人信息的提交或数据泄露(如点击 “查看详情” 实际触发个人资料的公开)。
  • 账号安全风险:若目标页面涉及账号操作(如绑定手机、更换邮箱),可能导致账号被劫持。
阅读全文 »

DES 对称加密算法详解

DES(Data Encryption Standard,数据加密标准)是一种经典的对称加密算法,尽管已逐渐被安全性更高的 AES 取代,但作为对称加密的重要里程碑,其设计思想对理解加密算法具有重要意义。

DES 的核心特性

  • 对称加密:加密和解密使用相同的密钥,密钥长度固定为56 位(实际存储为 64 位,含 8 位奇偶校验位)。
  • 分组加密:将明文按 64 位分组,逐组加密,最后一组不足 64 位时需填充。
  • 安全性:由于密钥长度较短(56 位),在现代计算能力下可被暴力破解,安全性已不足,但仍在部分 legacy 系统中使用。
  • 工作模式:支持 ECB、CBC、CFB 等多种分组加密模式(示例代码中未指定,默认使用 ECB 模式,安全性较低)。

DES 加密与解密流程解析

1. 加密过程(核心代码解析)

步骤 1:初始化随机数生成器
1
SecureRandom sr = new SecureRandom();

SecureRandom用于生成加密过程中所需的随机数,确保加密的随机性(尽管 DES 的安全性主要依赖密钥)。

步骤 2:处理密钥
1
2
3
DESKeySpec dks = new DESKeySpec(key); // 从密钥字节数组创建DES密钥规范
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); // 创建密钥工厂
SecretKey securekey = keyFactory.generateSecret(dks); // 生成符合DES标准的密钥
  • DESKeySpec:验证密钥合法性(必须为 8 字节,对应 56 位有效密钥)。
  • SecretKeyFactory:将原始密钥转换为 DES 算法可识别的SecretKey对象。
步骤 3:初始化加密器
阅读全文 »

平衡二叉树(AVL 树):严格平衡的二叉查找树

平衡二叉树(AVL 树)是一种自平衡的二叉查找树,其核心特性是左右子树的高度差(平衡因子)的绝对值不超过 1。通过严格的平衡约束和旋转操作,AVL 树保证了树的高度始终为O(logn),从而确保查找、插入、删除等操作的时间复杂度稳定在O(logn),避免了普通二叉查找树在极端情况下的性能退化。

AVL 树的核心定义与特性

平衡因子(Balance Factor)

  • 定义:对于 AVL 树中的每个节点,平衡因子 = 左子树高度 - 右子树高度
  • 约束:所有节点的平衡因子必须满足 -1 ≤ 平衡因子 ≤ 1

核心特性

  • 满足二叉查找树的所有性质(左子树节点值 < 根节点值 < 右子树节点值)。
  • 左右子树均为 AVL 树(递归定义)。
  • 树的高度严格控制在O(logn)(对于 n 个节点的 AVL 树,高度约为1.44log(n+2)-1.328)。

AVL 树的平衡维护:旋转操作

当插入或删除节点导致平衡因子的绝对值超过 1 时,AVL 树通过旋转操作恢复平衡。旋转的目标是调整节点位置,使平衡因子重新满足[-1, 1]的约束,同时保持二叉查找树的有序性。

1. 左旋(Left Rotation)

适用于右子树过高的场景(平衡因子为 - 2),通过将节点与其右子节点旋转,降低右子树高度。

阅读全文 »

Base64 编码:原理、应用与 Java 实现

Base64 是一种基于 64 个可打印字符(A-Z、a-z、0-9、+、/)来表示二进制数据的编码方式,它的核心作用是将二进制数据转换为文本格式,以便在仅支持文本传输的场景中安全传递(如 URL、邮件、XML 等)。

Base64 编码的核心原理

编码规则

  • 字符集:使用 64 个固定字符,对应值为 0-63:
    • A-Z(26 个):对应 0-25
    • a-z(26 个):对应 26-51
    • 0-9(10 个):对应 52-61
    • +:对应 62,/:对应 63
  • 填充符:当二进制数据长度不是 3 的倍数时,用=填充(最多 2 个),确保编码后长度为 4 的倍数。

编码过程(以 3 字节数据为例)

  1. 将 3 字节二进制数据(共 24 位)拆分为 4 个 6 位分组(24 ÷ 6 = 4)。
  2. 每个 6 位分组对应 Base64 字符集中的一个字符(0-63)。
  3. 若数据长度不足 3 字节,剩余位数用 0 填充,并用=补足 4 个字符。

示例:编码字符串"AB"(2 字节)

  • 二进制:01000001 01000010(16 位)
  • 拆分为 3 个 6 位分组 + 剩余 4 位补 0:010000 010100 001000 000000
  • 对应值:16、20、8、0 → 字符:QUJDAA==(最后两位用=填充)。

Base64 的应用场景

Base64 编码并非加密算法(编码过程可逆),主要用于二进制数据的文本化转换,典型场景包括:

阅读全文 »

hexo搜索引擎收录

hexo版本5.0.2 npm版本6.14.7 next版本7.8.0

写博客的目的肯定不是就只有自己能看到,想让更多的人看到就需要可以让搜索引擎来收录对应的文章。hexo支持生成站点地图sitemap

在hexo下的_config.yml中配置站点地图

1
2
3
4
5
6
7
url: https://zhhll.icu
sitemap:
url: https://zhhll.icu # 自己的域名
path: sitemap.xml #站点地图文件名称
baidusitemap:
url: https://zhhll.icu # 自己的域名
path: baidusitemap.xml #站点地图文件名称

然后在博客目录下安装

1
2
3
4
# 生成普通版本
npm install hexo-generator-sitemap --save
# 生成百度版本
npm install hexo-generator-baidu-sitemap --save

此时就会在public目录下生成对应的站点地图

阅读全文 »