讲师中心 微信公众号
AI工具推荐 视频效率加速

PHP获取域名后如何加密存储_PHP域名加密保存技巧【技巧】

星萱小哥_1799

星萱小哥_1799

发布时间:2026-02-05 12:12:10

|

162人浏览过

|

来源于php中文网

原创

PHP域名加密须先标准化再AES-256-GCM加密:统一小写、去端口、可选去www;密钥用random_bytes(32),IV每次重置,密文含IV+tag+密文三部分;解密须校验tag和域名合法性,密钥轮换需兼容新旧密钥并重加密旧数据。

php获取域名后如何加密存储_php域名加密保存技巧【技巧】

PHP中域名加密前必须先标准化

直接对原始 $_SERVER['HTTP_HOST'] 或 $_SERVER['SERVER_NAME'] 加密是危险的——不同访问方式(带www、不带www、含端口、HTTPS重定向)会导致同一站点产生多个“不同域名”,后续校验无法匹配。必须先做归一化处理:

  • 统一转小写:strtolower($host)
  • 剥离端口(如 :8080)和协议头(https:// 已不在 HTTP_HOST 中,但需注意反向代理场景)
  • 可选:强制去 www(preg_replace('/^www\./i', '', $host)),但需确认业务是否允许子域共用密钥
  • 最终建议格式:$canonicalDomain = rtrim($host, '.')(防尾部点号)

用 openssl_encrypt() 替代 mcrypt 或简单 base64

mcrypt 已被废弃,base64_encode() 不是加密,只是编码,毫无安全性。真实加密必须用现代 AEAD 模式:

  • 推荐算法:'aes-256-gcm'(PHP 7.1+),兼顾安全与性能
  • 密钥必须由 random_bytes(32) 生成,**绝不能硬编码字符串或用 md5/SHA 拼接**
  • 每次加密必须用新 IV:$iv = random_bytes(openssl_cipher_iv_length('aes-256-gcm'))
  • 完整密文需保存三部分:密文 + IV + 认证标签($tag),缺一不可,否则解密失败

示例关键片段:

$cipher = 'aes-256-gcm';
$key = hex2bin('your-32-byte-hex-key-from-config'); // 实际应从环境变量或密钥管理服务读取
$iv = random_bytes(openssl_cipher_iv_length($cipher));
$tag = '';
$ciphertext = openssl_encrypt($domain, $cipher, $key, OPENSSL_RAW_DATA, $iv, $tag);
$stored = base64_encode($iv . $tag . $ciphertext); // 合并后 Base64 存数据库字段

解密时验证完整性比解密本身更关键

攻击者可能篡改存储的密文,若只检查 openssl_decrypt() 返回 false 就报错,会暴露侧信道(如通过响应时间判断密文结构)。正确做法:

Adblock Dns
Adblock Dns

在你的机器上运行DNS服务器,使用Pi-hole黑名单阻止189,000+个广告、追踪器和恶意软件域名,实现全网拦截。

下载

立即学习“PHP免费学习笔记(深入)”;

  • 先完整解析出 IV、tag、密文三段(长度固定:iv_len=12, tag_len=16 for GCM)
  • 调用 openssl_decrypt() 时传入 $tag,函数内部自动校验;若 tag 错误,返回 false 且**不泄露任何中间状态**
  • 解密成功后,仍需用 hash_equals() 校验解密结果是否为合法域名(防空字节截断或 null 字符注入)
  • 绝不使用 == 或 strcmp() 做域名比对

密钥轮换时域名需重新加密,不能只更新密钥配置

很多团队以为改了配置里的密钥,旧数据就自动“升级”了——这是典型误解。加密是单向操作,旧密文只能用原密钥解密。若要轮换密钥:

  • 必须在应用层加一层兼容逻辑:先尝试用新密钥解密,失败则用旧密钥解密并立即用新密钥重加密存储
  • 数据库字段需预留足够长度(GCM 下约增加 40%),避免 varchar(255) 存不下新格式
  • 批量重加密任务必须加分布式锁,防止并发导致同一行被多次覆盖
  • 切勿在低峰期一次性全量更新——DNS 解析、CDN 缓存、客户端 Cookie 都可能让旧域名短暂回流

真正难的不是加密函数怎么写,而是让加密后的值在分布式、多版本、长期演进的系统里始终可逆、可验证、可迁移。

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

超级麦吉

一款通过数字员工协作完成调研、数据分析与文档制作的AI办公平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

相关专题

更多
什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

2093

2023.08.11

分布式和微服务的区别
分布式和微服务的区别

分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

3274

2023.10.07

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

549

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1698

2024.03.01

cookie
cookie

Cookie 是一种在用户计算机上存储小型文本文件的技术,用于在用户与网站进行交互时收集和存储有关用户的信息。当用户访问一个网站时,网站会将一个包含特定信息的 Cookie 文件发送到用户的浏览器,浏览器会将该 Cookie 存储在用户的计算机上。之后,当用户再次访问该网站时,浏览器会向服务器发送 Cookie,服务器可以根据 Cookie 中的信息来识别用户、跟踪用户行为等。

12179

2023.06.30

document.cookie获取不到怎么解决
document.cookie获取不到怎么解决

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1206

2023.11.23

阻止所有cookie什么意思
阻止所有cookie什么意思

阻止所有cookie意味着在浏览器中禁止接受和存储网站发送的cookie。阻止所有cookie可能会影响许多网站的使用体验,因为许多网站使用cookie来提供个性化服务、存储用户信息或跟踪用户行为。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

844

2024.02.23

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

1926

2025.08.19

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

80

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn