PHP 怎么PHP Referrer-Policy

wen PHP项目 2

本文目录导读:

PHP 怎么PHP Referrer-Policy

  1. 使用 header() 函数(最常用)
  2. 在 HTML 中设置(替代方案)
  3. 通过配置 Apache/Nginx 设置
  4. 完整示例:根据环境动态设置
  5. 验证设置是否生效
  6. 注意事项

在 PHP 中设置 Referrer-Policy 主要有以下几种方法:

使用 header() 函数(最常用)

全局设置

<?php
// 在页面顶部设置
header('Referrer-Policy: strict-origin-when-cross-origin');
?>

常见策略值

// 不发送 Referrer 信息
header('Referrer-Policy: no-referrer');
// 只发送来源网站的协议、主机和端口
header('Referrer-Policy: origin');
// 同源发送完整URL,跨域只发送来源
header('Referrer-Policy: strict-origin-when-cross-origin');
// 只发送同源的 Referrer
header('Referrer-Policy: same-origin');
// 强制发送完整 Referrer
header('Referrer-Policy: unsafe-url');

在 HTML 中设置(替代方案)

<?php
// 如果无法修改 headers,可以在 HTML 中设置
echo '<meta name="referrer" content="strict-origin-when-cross-origin">';
?>

通过配置 Apache/Nginx 设置

Apache (.htaccess)

<IfModule mod_headers.c>
    Header set Referrer-Policy "strict-origin-when-cross-origin"
</IfModule>

Nginx

add_header Referrer-Policy "strict-origin-when-cross-origin";

完整示例:根据环境动态设置

<?php
// 允许所有来源的请求
header('Access-Control-Allow-Origin: *');
// 根据环境设置不同的 Referrer-Policy
$environment = getenv('APPLICATION_ENV'); // 获取环境变量
switch ($environment) {
    case 'development':
        header('Referrer-Policy: no-referrer-when-downgrade');
        break;
    case 'production':
        header('Referrer-Policy: strict-origin-when-cross-origin');
        break;
    default:
        header('Referrer-Policy: strict-origin-when-cross-origin');
}
// 其他必需的 headers
header('X-Content-Type-Options: nosniff');
header('X-Frame-Options: SAMEORIGIN');
?>

验证设置是否生效

<?php
header('Referrer-Policy: strict-origin-when-cross-origin');
// 检查 headers 是否已发送
if (headers_sent()) {
    echo 'Headers 已经发送,无法更改';
} else {
    // 可以安全设置 header
    header('Referrer-Policy: strict-origin-when-cross-origin');
}
?>

注意事项

  1. 必须在使用任何输出前调用 header()

    确保在 HTML、echo 等输出之前设置

  2. PHP 5.5+ 支持这种设置方法

  3. 浏览器兼容性

    主流浏览器都支持,但旧版本可能有差异

  4. 优先级

    • HTTP Header > <meta> 标签 > 浏览器默认设置

最推荐的做法是在 PHP 文件顶部使用 header() 函数设置,因为它能够全局控制,易于管理和维护。

抱歉,评论功能暂时关闭!