如何隐藏服务器、PHP 和 WordPress 版本
简短回答:在 nginx 中设置 server_tokens off;,在 Apache 中设置 ServerTokens Prod 和 ServerSignature Off,在 php.ini 中设置 expose_php = Off,并移除 WordPress 的 generator 标签。这样自动化工具就无法把你的确切版本与已知漏洞利用对应起来。这只是一个小的补充,而不是修复:过时的软件仍然需要更新。
代码和配置保持英文。
查看你暴露了什么
curl -sI https://yourdomain.com | grep -iE '^(server|x-powered-by):'
curl -s https://yourdomain.com | grep -io '<meta name="generator"[^>]*>'nginx
server_tokens off; # in the http { } blockApache
这些配置要放在服务器主配置中(不是 .htaccess)。修改后重启 Apache。
ServerTokens Prod
ServerSignature OffPHP
expose_php = Off如果使用共享主机,请在控制面板中查找 PHP 设置页面。如果你自己管理服务器,请重启 PHP-FPM。
WordPress
<?php
// wp-content/mu-plugins/no-generator.php
remove_action( 'wp_head', 'wp_generator' );
add_filter( 'the_generator', '__return_empty_string' );同时删除网站根目录下的 readme.html(每次更新后它都会回来,所以每次更新后都要检查)。
为什么更新更重要
攻击者经常不先检查版本就直接尝试漏洞利用。隐藏版本号只是去掉了一个容易获取的线索,旧版本唯一真正的修复方法是更新。HackGrade 把可见的版本号评为低风险,把已停止支持的 PHP 版本评为更高风险。
常见问题
隐藏版本号会提高我的安全评级吗?
会略有提高。版本泄露属于低严重程度的问题。更新过时的软件影响要大得多。
可以完全删除 Server 响应头吗?
使用标准的 nginx 或 Apache 做不到,但可以把它缩减为只显示产品名称。一些 CDN 会把它替换成自己的名称。
隐藏 WordPress 版本能阻止别人检测插件版本吗?
不能。插件和主题文件通常带有自己的版本字符串。请保持它们更新。