0

0

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

絕刀狂花

絕刀狂花

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

|

122人浏览过

|

来源于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 就报错,会暴露侧信道(如通过响应时间判断密文结构)。正确做法:

玄鲸Timeline
玄鲸Timeline

一个AI驱动的历史时间线生成平台

下载

立即学习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工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

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

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

373

2023.08.11

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

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

238

2023.10.07

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

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

238

2023.09.22

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

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

560

2024.03.01

cookie
cookie

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

6435

2023.06.30

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

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

352

2023.11.23

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

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

415

2024.02.23

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

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

95

2025.08.19

java return合集
java return合集

本专题整合看java中return关键词的用途,语句的使用等等内容,阅读专题下面的文章了解更多详细内容。

0

2026.02.05

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 11.1万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号