百度云签到出现CSRF跨站请求错误原因排查及修复

百度云签到出现CSRF跨站请求错误原因排查及修复

起因

六月份的时候把服务器重装了一下,从CentOS6升级到了CentOS7,结果转义之后的百度云签到莫名的出现了点击设置就出现CSRF跨站请求警告,当时只是简单的将目录里config.php中的ANTI_CSRFtrue改成了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中hostSERVER_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也不会报错,怪不得云签到会提示我hostSERVER_NAME不一样了

解决

因此直接将t.coofex.cn添加到443的监听里,然后重启nginx服务器就好了。
果然错误原因还是我的粗心大意😭

参考:

1.https://blog.csdn.net/xyy_forever/article/details/78497908
2.http://www.zhaoan.org/1809.html

消息盒子
# 您需要首次评论以获取消息 #
# 您需要首次评论以获取消息 #

只显示最新10条未读和已读信息