分类 工作&技术 下的文章

这周的第二次了。我本来昨天还在想要不要把博客直接裸连在阿里云香港上,这样访问快一点,现在也不用想了。
当然,如果只是哪个朋友想测试一下我说的这些安全性的东西,那是欢迎的,因为数据有点象是点到为止的感觉。最终结果图表上可以看出,cc攻击完全失败了。
这次是有针对性的cc攻击,是访问的 /search,通常,在大多数系统里面,search相当耗费资源,是个cc的极佳入手点。不过,我设置了针对search的js挑战,所以,全部拦截了下来。
即,设置只允许白名单URL,其余的全部进行质询,search不在白名单。与缓存搭配,也就是,白名单的URL全部缓存,非白名单的即质询。
看上去天衣无缝了?不,还有一个重大的问题,即404攻击。我先卖个关子,在接下来的时间里我再来说这个。

d1.jpg

针对/search/进行攻击被拦截
d2.jpg

全站缓存效果
d3.jpg

甲骨文云今天修改了帐号区域限制,一个帐号现在允许总共3个使用区(即,新增2个额度),只限已升级的付费帐号。
需要注意:

  1. 免费额度只限ARM在各区共享,AMD额度只在主区域拥有。
  2. 所有区的ARM的累计总额度是: 4核24G。
  3. 主可用区拥有200G免费硬盘额度,其余的区域没有免费额度,跨区新机器均会为硬盘计费。按照默认值,一台机器为约50G,一个月费用则为2.7新币左右。准确数字在新建机器时有提示。
  4. 流量各区共享,只限制 10T 出流量。

copy.jpg

这几天说缓存,这说完,CC就来了。
不过要不是我正在看CF后台,我还真不知道有这么件事。感谢这位仁兄的“测试”了。
数据看上去,达到了预期。另外,CF的的HTTP DDOS也不错,及时发现并自动处理了。

p1.jpg
p2.jpg

前几天的博文“设置了CF全站缓存” 中,我说有空的时候来设做一下这个功能。现在补上,咱不是只会放空炮的人。 :)
用处我大概说一下。 这样修改后,可以设置一个非常大的全站缓存时间,比如几天甚至更长。因为典型的Typecho仅在新增博文和新增评论时页面发生变更,没页面变更是不需要刷缓存的。新增博文可以博主手动刷新缓存,但新增评论就需要自动进行了。如果不这样,人家读者来发一篇评论要几天后才显示出来,胸闷坏啊。

修改 var/Widget/Base/Comments.php
在 public function insert(array $rows): int 这行前增加函数:

//调用CLOUDFLARE API刷新全站缓存,即 缓存->配置->清除所有内容 功能。 如果你不想这么暴力可以改一下参数,让gpt改就可以了,我就不写了。事实上,这段代码就是gpt写的。
private function purgeCloudflareCache($email, $apiKey, $zoneId, $purgeEverything = true, $files = []) {
    $apiUrl = 'https://api.cloudflare.com/client/v4/zones/' . $zoneId . '/purge_cache';

    // 构建请求负载
    if ($purgeEverything) {
        $payload = json_encode(['purge_everything' => true]);
    } else {
        $payload = json_encode(['files' => $files]);
    }

    // 初始化 cURL
    $ch = curl_init($apiUrl);

    // 设置 cURL 选项
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
    curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Content-Type: application/json',
        'X-Auth-Email: ' . $email,
        'X-Auth-Key: ' . $apiKey,
    ]);

    // 执行请求并获取响应
    $response = curl_exec($ch);
    $error = curl_error($ch);
    curl_close($ch);

    // 检查请求是否成功
    if ($error) {     //刷新有问题时把die注释取消看看怎么回事
        //die('cURL Error: ' . $error);
    } else {
        $responseData = json_decode($response, true);
        if ($responseData['success']) {
            //die( 'Cache purge successful!');
        } else {
            //die( 'Cache purge failed: ' . $responseData['errors'][0]['message']);
        }
    }
}

然后,在 public function insert(array $rows): int 函数的末尾行,即 return $insertId 前面,加入一行:
$this->purgeCloudflareCache("你的cf登录email", "Global API Key", "区域ID");
这两个参数,是在这个域名的 “概述”页面,右下角,“区域ID”,和 “获取您的API令牌”->Global API Key->查看 中获得。

具体的事情就不重复了,v2ex和52pojie上都有详细的分析。
看到这个我吓了一跳,赶紧自查,还好,我们就只用过bootcdn,但前段时间已经改成了自己的cdn。
解决办法,就是需要将:
bootcss.com
bootcdn.net
staticfile.net
staticfile.org
全部替换掉,或者用自己的cdn,或者用第三方的,比如 s4.zstatic.net/ajax/libs。

*科普一条linux常用命令:
grep -r 'bootcss.com' 查找当前目录及子目录下,所有包含 bootcss.com 的文件。