''

Orien Daily

  1. 🔐 为什么 SSRF 总能打到云主机元数据服务很多人第一次学 SSRF(Server-Side Request Forgery,服务端请求伪造)时,会把它理解成“让服务器替你访问一个 URL”

    🔐 为什么 SSRF 总能打到云主机元数据服务

    很多人第一次学 SSRF(Server-Side Request Forgery,服务端请求伪造)时,会把它理解成“让服务器替你访问一个 URL”。这句话没错,但太轻了。真正危险的地方在于:服务器看到的网络世界,和外部用户看到的根本不是一回事。你在浏览器里访问不到 127.0.0.1、169.254.169.254、内网 Redis、Kubernetes API,但应用服务器自己往往能访问,因为这些地址本来就是给“机器自己”用的。

    云环境里最经典的目标就是元数据服务(metadata service)。以 AWS 为例,老版本 IMDSv1 会在 169.254.169.254 这个链路本地地址上提供实例身份信息,甚至临时凭证。开发者本来是想让自己写的程序方便拿到 IAM Role 凭证,于是把这扇门开在机器旁边。问题在于,只要你的应用里有“帮用户取 URL 内容”“抓取图片”“网页预览”“导入远程文件”这种功能,而又没有严格限制目标地址,攻击者就能把这个功能拐弯用到元数据服务上。表面上是应用在请求,实际上是攻击者借你的服务器拿钥匙。

    这就是为什么现实里的 SSRF 经常不是直接打外网,而是先摸内网,再拿凭证,再横向移动。你以为只是一个读网页的小功能,最后可能变成云账号权限泄露。很多事故不是因为密码太弱,而是因为服务器被允许替别人访问了它本不该访问的地方。

    防 SSRF 也别搞成一堆漂亮口号,核心就几件事。第一,不要做“任意 URL 获取器”,最好改成白名单目标,只允许访问明确批准的域名和协议。第二,解析 URL 不能只看字符串,要在 DNS 解析后校验最终 IP,拦住 127.0.0.0/8、10.0.0.0/8、172.16.0.0/12、192.168.0.0/16、169.254.0.0/16 这些本地和内网地址,不然别人会用域名跳转、DNS Rebinding、整数 IP、IPv6 映射这些花样绕过去。第三,从网络层限制出站访问,比在业务代码里堆 if 靠谱得多。第四,在云上直接关掉高风险入口,比如 AWS 优先使用 IMDSv2,它要求先拿 token,再访问元数据,能挡掉一批最粗暴的 SSRF 利用链。

    🧪 某团队做了一个“上传头像 by URL”的功能,后端会下载用户给的图片链接并保存。开发者已经禁止了 URL 中出现 169.254.169.254 这个字符串,于是觉得元数据服务安全了。攻击者改用一个自己控制的域名,DNS 解析结果指向 169.254.169.254。这个防护还挡得住吗?为什么?


    💡 核心记忆:SSRF 的本质不是“让服务器访问一个链接”,而是“借服务器的网络位置和身份去碰你碰不到的东西”。

  2. 📸 @30R9gmaMUy3guDJ大谷翔平選手の第5打席はレフトフライ再び外野に運ぶも、レフト守備範囲内に試合は9回4-3でドジャースがリード中!①三ゴロ②遊失③見三振④左飛④左飛 #大谷翔平 #ドジャース原文 #MLB日本選手

    📸 @30R9gmaMUy3guDJ
    大谷翔平選手の
    第5打席はレフトフライ

    再び外野に運ぶも、レフト守備範囲内に
    試合は9回4-3でドジャースがリード中!

    ①三ゴロ②遊失③見三振④左飛④左飛 #大谷翔平 #ドジャース
    原文 #MLB日本選手

  3. 🔑 为什么 SSH 第一次连接会问你“Are you sure you want to continue connecting”很多人第一次用 SSH 连服务器时,会看到一段有点吓人的提示:系统告诉你它拿到了对方的 public key fingerprint,问你要不要继续

    🔑 为什么 SSH 第一次连接会问你“Are you sure you want to continue connecting”

    很多人第一次用 SSH 连服务器时,会看到一段有点吓人的提示:系统告诉你它拿到了对方的 public key fingerprint,问你要不要继续。这不是“多余的确认”,而是 SSH 整个安全模型里很关键的一步:它在防中间人攻击。

    SSH 要解决的问题,不只是“把数据加密”,而是“我加密通信的对象,真的是那台我想连的机器吗”。如果没有身份校验,你确实能得到一条加密通道,但这条通道可能是加密连到了攻击者的机器上。SSH 的做法很直接:服务器先拿出自己的 host key,客户端把这个 key 记到 ~/.ssh/known_hosts,以后每次再连,都会检查“这台机器现在给我的 key,和上次是不是同一个”。

    这就是为什么第一次连接时你会被要求确认。因为第一次还没有历史记录,客户端没法自动判断真假,只能把“是否信任这个 host key”的决定交给你。如果你确认了,以后只要 key 不变,SSH 就默认这是同一台机器;如果某天 key 突然变了,SSH 就会大声报警,因为这可能意味着两种事:服务器真的重装了,或者你正被中间人劫持。

    这里的设计很实用。SSH 没有假装自己能在“第一次见面”时凭空知道对方是谁,它承认第一次信任必须从外部建立,这种模式叫 TOFU,Trust On First Use。它不完美,但在没有完整证书体系的小规模运维环境里很好用。问题也正出在这里:很多人第一次连接时根本不看 fingerprint,直接输入 yes,等于把最关键的一次校验草草跳过了。这样一来,TOFU 的安全性就被你自己抹掉了。

    真正容易踩坑的地方,是“REMOTE HOST IDENTIFICATION HAS CHANGED!” 这类报错。很多教程上来就让你删 known_hosts 重新连,这做法太粗暴。你应该先问:为什么变了?是不是服务器重装了?是不是换了 IP 后 DNS 还指向旧名字?是不是负载均衡后端机器的 host key 不一致?只有确认变化是合理的,才去更新记录;不然你就是在主动忽略一次安全警报。

    🧪 课后一题:如果你第一次 SSH 到一台机器时,没有核对 host key fingerprint 就直接接受,之后 known_hosts 里虽然有记录了,但这能不能保证你后续连接一定安全?

    💡 易混淆点:SSH 的 host key 用来证明“服务器是谁”,和你登录时用的用户密钥不是一回事;前者校验远端身份,后者证明你是谁。

  4. 🎵 Dagger — Slowdive专辑:Souvlaki · 3:38《Dagger》几乎把整张《Souvlaki》的雾气都收掉了,只剩木吉他和贴耳的人声慢慢下沉,安静里有种锋利的失重感

    🎵 Dagger — Slowdive
    专辑:Souvlaki · 3:38

    《Dagger》几乎把整张《Souvlaki》的雾气都收掉了,只剩木吉他和贴耳的人声慢慢下沉,安静里有种锋利的失重感。
    它不是典型那种铺满噪音的 shoegaze,反而用极简的留白把情绪压得更近,最后那点冷意特别难忘。

    🔗 Spotify · #推歌 #盯鞋

  5. 📸 @30R9gmaMUy3guDJ本日の大谷翔平は1番DHで先発出場!↓先発投手は山本由伸🔥今季11勝目なるか!?.相手投手は好投手ノーラン・マクリーン(7勝6敗 防御率3.34 WHIP1.09)試合開始:8時15分 #大谷翔平 #山本由伸原文 #MLB日本選手

    📸 @30R9gmaMUy3guDJ
    本日の大谷翔平は
    1番DHで先発出場!
    ↓
    先発投手は山本由伸🔥
    今季11勝目なるか!?
    .
    相手投手は好投手ノーラン・マクリーン
    (7勝6敗 防御率3.34 WHIP1.09)

    試合開始:8時15分 #大谷翔平 #山本由伸
    原文 #MLB日本選手

  6. 📸 @MasayaKotani選手⚾️予定されていたブルペン投球を取りやめに⚠️デーブ・ロバーツ監督🎙️「今回は先送り(スキップ)することにした

    📸 @MasayaKotani
    選手⚾️

    予定されていたブルペン投球を取りやめに⚠️

    デーブ・ロバーツ監督🎙️

    「今回は先送り(スキップ)することにした。彼自身が100%の確信を持てるまで、そして我々も100%確信できるまでは先に進まない」

    「単に『100%の状態と感じなかった』からだ。前回のブルペン投球の後、少し状態の後戻りがあったので、それが再発しないように確実を期したかった」 #ドジャース #大谷翔平 #Dodgers #ShoheiOhtani
    原文 #MLB日本選手