本文目录导读:

在 PHP 中实现 HSTS(HTTP Strict Transport Security)主要有以下几种方法:
在 PHP 代码中设置 Header
基础设置
// 在页面输出的最顶部设置
header('Strict-Transport-Security: max-age=31536000; includeSubDomains');
完整设置(推荐)
// 强制 HTTPS 并设置 HSTS
if ($_SERVER['HTTPS'] != 'on' && $_SERVER['HTTP_X_FORWARDED_PROTO'] != 'https') {
header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], true, 301);
exit;
}
// 设置 HSTS(仅在 HTTPS 连接时发送)
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
header('Strict-Transport-Security: max-age=31536000; includeSubDomains; preload');
}
带预加载的 HSTS
header('Strict-Transport-Security: max-age=31536000; includeSubDomains; preload');
在 PHP 配置文件中设置(多个页面共用)
创建公共配置文件 config.php
<?php
// config.php
function enforceHTTPS() {
// 强制 HTTPS
if (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] !== 'on') {
$redirect_url = "https://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
header("Location: " . $redirect_url, true, 301);
exit();
}
// 设置 HSTS header
header("Strict-Transport-Security: max-age=31536000; includeSubDomains; preload");
}
// 调用函数
enforceHTTPS();
然后在其他 PHP 文件中引用:
<?php require_once 'config.php'; // 其他代码...
使用 .htaccess(Apache)
如果使用 Apache,可以在 .htaccess 中设置:
# 强制 HTTPS 并设置 HSTS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# 设置 HSTS Header
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
使用 nginx 配置
server {
listen 443 ssl;
# ... SSL 配置 ...
# 设置 HSTS
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
# 将 HTTP 重定向到 HTTPS
}
HSTS 参数说明
// 不同的参数组合
$hsts_params = [
// 基础 - 有效期 1 年
'max-age=31536000',
// 包含子域名
'max-age=31536000; includeSubDomains',
// 包含预加载请求
'max-age=31536000; includeSubDomains; preload',
// 开发环境 - 较短有效期
'max-age=86400',
// 测试时禁用
'max-age=0'
];
// 使用示例
header('Strict-Transport-Security: ' . $hsts_params[2]);
完整的 PHP 实现示例
<?php
class SecurityHeaders {
public static function applyHSTS() {
// 检查是否 HTTPS
$is_https = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on')
|| (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https');
if ($is_https) {
// 生产环境配置
if ($_SERVER['SERVER_NAME'] === 'example.com') {
header('Strict-Transport-Security: max-age=31536000; includeSubDomains; preload');
} else {
// 开发/测试环境
header('Strict-Transport-Security: max-age=3600; includeSubDomains');
}
// 其他安全 header
header('X-Content-Type-Options: nosniff');
header('X-Frame-Options: SAMEORIGIN');
header('X-XSS-Protection: 1; mode=block');
}
}
}
// 调用
SecurityHeaders::applyHSTS();
注意事项
重要提示:
- HSTS 只应在 HTTPS 连接下设置,在 HTTP 下设置无效
- 设置
preload参数需要先提交到 HSTS Preload List - 一旦浏览器缓存 HSTS,无法通过 HTTP 访问,需要等缓存过期
- 测试时建议使用短有效期,如
max-age=3600
验证是否生效:
# 使用 curl 检查 header curl -I https://your-domain.com # 或使用浏览器开发者工具查看响应头
正确的 HSTS 实现能够有效防止 SSL 剥离攻击,显著提升网站安全性,但需要注意,一旦启用,需要确保 HTTPS 配置完全正确并长期维护。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播