百度云签到出现CSRF跨站请求错误原因排查及修复
百度云签到出现CSRF跨站请求错误原因排查及修复
起因
六月份的时候把服务器重装了一下,从CentOS6升级到了CentOS7,结果转义之后的百度云签到莫名的出现了点击设置就出现CSRF跨站请求警告,当时只是简单的将目录里config.php
中的ANTI_CSRF
从true
改成了false
。
排查
今天登陆的时候又看到了这个问题,在云签到的issue
上根本没人出现过和我一样的问题,只有Wiki上关于云签到CSRF防御干巴巴的一些安全解释,由于我根本就没学过php,因此本来准备直接群发邮件关闭这个签到站,或者直接重装一遍,但是这个时间可能有点太久了,根本耗不起(其实是懒得重装,这个问题都出现快两个月了我才着手解决😂)
于是在源码里搜一下CSRF
这个关键词,想着看看其自身是如何判断的请求来源属于跨站请求的,在lib
目录下的sfc.functions.php
里有如下代码
/**
* 防CSRF验证
* @param bool $strict 严格模式。拒绝空referer
*/
function csrf($strict = true) {
if(defined('ANTI_CSRF') && !ANTI_CSRF) return;
global $i;
if(empty($i['opt']['csrf'])) {
if(empty($_SERVER['HTTP_REFERER']) && $strict) redirect('index.php');
$p = parse_url($_SERVER['HTTP_REFERER']);
if(!$p || empty($p['host'])) msg('CSRF防御:无效请求。<a href="https://git.oschina.net/kenvix/Tieba-Cloud-Sign/wikis/%E5%85%B3%E4%BA%8E%E4%BA%91%E7%AD%BE%E5%88%B0CSRF%E9%98%B2%E5%BE%A1" target="_blank">了解更多关于CSRF防御...</a>');
if($p['host'] != $_SERVER['SERVER_NAME']) msg('CSRF防御:错误的请求来源<a href="https://git.oschina.net/kenvix/Tieba-Cloud-Sign/wikis/%E5%85%B3%E4%BA%8E%E4%BA%91%E7%AD%BE%E5%88%B0CSRF%E9%98%B2%E5%BE%A1" target="_blank">了解更多关于CSRF防御...</a>');
}
}
而官网给的解释是
云签到通过检测 HTTP Referer 来避免您的站点遭到CSRF(跨站请求伪造)攻击
而我这里出现的错误是
因此错误的原因就是其中的host
不等于SERVER_NAME
if($p['host'] != $_SERVER['SERVER_NAME'])
百度了以下php中host
和SERVER_NAME
的区别,搜出来的前面几页大部分都是复制粘贴的,看了半天没看懂。
而且我网站后台设置中的网址和实际访问网址都是一样的https://t.coofex.cn
,按道理来说不应该出现这样的问题,都是一样的网址难道浏览器请求还能不一样了吗?
于是打开nginx服务器的vhost列表,准备看看是不是conf
文件有什么问题
其中80端口除了t.coofex.cn
外还有coofex.cn
和*.coofex.cn
两个域名,前者是用来跳转的,后者则是进行SSL证书颁发的域名,且添加了301跳转和rewrite
但当我把conf文件拉到拉到443端口的时候发现,443端口只监听了coofex.cn
和*.coofex.cn
两个域名,且还将coofex.cn
强制rewrite到https://t.coofex.cn/
去
#域名重定向
if ( $host = 'coofex.cn' ) {
rewrite ^/(.*)$ https://t.coofex.cn/$1 permanent;
}
所以443端口根本就没有t.coofex.cn
,而我配置的SSL证书由于是通配符证书,加上已经有了80端口的监听和强制rewrite,即使443端口没有监听t.coofex.cn
也不会报错,怪不得云签到会提示我host
和SERVER_NAME
不一样了
解决
因此直接将t.coofex.cn
添加到443的监听里,然后重启nginx服务器就好了。
果然错误原因还是我的粗心大意😭
参考:
1.https://blog.csdn.net/xyy_forever/article/details/78497908
2.http://www.zhaoan.org/1809.html