<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Static-Site on jin-hao</title><link>https://blog.jin-hao.tw/tags/static-site/</link><description>Recent content in Static-Site on jin-hao</description><generator>Hugo</generator><language>zh-tw</language><lastBuildDate>Mon, 13 Jul 2026 10:00:00 +0800</lastBuildDate><atom:link href="https://blog.jin-hao.tw/tags/static-site/index.xml" rel="self" type="application/rss+xml"/><item><title>本站是怎麼架起來的:一個資安顧問的靜態部落格選型</title><link>https://blog.jin-hao.tw/posts/how-this-site-is-built/</link><pubDate>Mon, 13 Jul 2026 10:00:00 +0800</pubDate><guid>https://blog.jin-hao.tw/posts/how-this-site-is-built/</guid><description>&lt;p&gt;這是本站的第一篇文章。第一篇不寫別的,先交代這個網站本身是怎麼來的——因為對我來說,&lt;strong&gt;選型的過程比選型的結果更能說明一個人怎麼思考&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;我的日常工作是資安顧問。這代表一件事:這個網站不只是我的發布平台,它本身就是我專業的一部分展示品。一個資安從業者的網站如果被掛馬、被植入惡意腳本,那不是運維事故,是聲譽事故。所以整個選型只從一個問題出發:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我能不能讓這個網站,&lt;strong&gt;沒有東西可以被攻擊&lt;/strong&gt;?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="從攻擊面開始想而不是從功能開始想"&gt;
 從攻擊面開始想,而不是從功能開始想
 &lt;a class="heading-link" href="#%e5%be%9e%e6%94%bb%e6%93%8a%e9%9d%a2%e9%96%8b%e5%a7%8b%e6%83%b3%e8%80%8c%e4%b8%8d%e6%98%af%e5%be%9e%e5%8a%9f%e8%83%bd%e9%96%8b%e5%a7%8b%e6%83%b3"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;大多數人架部落格的思考順序是:我要什麼功能(留言、後台、外掛)→ 選一個滿足功能的系統 → 再想辦法把它加固。&lt;/p&gt;
&lt;p&gt;我把順序倒過來:先問這個網站&lt;strong&gt;必須&lt;/strong&gt;有什麼,其他一律不要。&lt;/p&gt;
&lt;p&gt;答案很短——它必須能被讀、能被搜尋引擎索引、能訂閱。就這樣。它不需要後台(我在自己的電腦上寫作)、不需要資料庫(文章就是檔案)、不需要任何伺服器端的執行環境(沒有動態內容)。&lt;/p&gt;
&lt;p&gt;把這個需求清單攤開,結論自己浮出來:&lt;strong&gt;純靜態網站&lt;/strong&gt;。&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;面向&lt;/th&gt;
					&lt;th&gt;動態系統(如 WordPress)&lt;/th&gt;
					&lt;th&gt;純靜態(本站)&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;伺服器端執行環境&lt;/td&gt;
					&lt;td&gt;PHP + 資料庫&lt;/td&gt;
					&lt;td&gt;無&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;後台登入頁&lt;/td&gt;
					&lt;td&gt;有(永遠在被掃)&lt;/td&gt;
					&lt;td&gt;不存在&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;外掛供應鏈風險&lt;/td&gt;
					&lt;td&gt;有,且是主要破口&lt;/td&gt;
					&lt;td&gt;無&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;需要持續修補的元件&lt;/td&gt;
					&lt;td&gt;CMS 核心、外掛、主題、PHP、DB&lt;/td&gt;
					&lt;td&gt;幾乎只剩 web server 本身&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;被入侵後能改什麼&lt;/td&gt;
					&lt;td&gt;資料庫、程式碼、掛馬&lt;/td&gt;
					&lt;td&gt;沒有可持久化的執行點&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;沒有後台,就沒有暴力破解;沒有資料庫,就沒有注入;沒有伺服器端程式,就沒有 RCE。這不是「加固到很難打」,是&lt;strong&gt;結構上沒有東西可打&lt;/strong&gt;。剩下的攻擊面收斂到 web server 與基礎設施層,而那是一個小得多、也成熟得多的問題。&lt;/p&gt;
&lt;h2 id="技術組合"&gt;
 技術組合
 &lt;a class="heading-link" href="#%e6%8a%80%e8%a1%93%e7%b5%84%e5%90%88"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;本站目前的組合如下——刻意只描述到「選了什麼」的層次,部署細節不在公開範圍(這也是一種攻擊面管理):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;產生器:&lt;a href="https://gohugo.io/" class="external-link" target="_blank" rel="noopener"&gt;Hugo&lt;/a&gt;&lt;/strong&gt; — 單一執行檔、build 速度極快、對 Markdown 原生友善&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;主題:&lt;a href="https://github.com/luizdepra/hugo-coder" class="external-link" target="_blank" rel="noopener"&gt;hugo-coder&lt;/a&gt;&lt;/strong&gt; — 極簡、為技術寫作而生,不用跟版面纏鬥&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;寫作格式:Markdown&lt;/strong&gt; — 文章就是版本控制裡的一個 &lt;code&gt;.md&lt;/code&gt; 檔&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;版本控制:git&lt;/strong&gt; — 整個網站是一個 repo,source of truth 不在伺服器上&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;前端防護:CDN 反向代理&lt;/strong&gt; — 源站不直接面對網際網路&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;主機:自管伺服器&lt;/strong&gt; — 產出的靜態檔案由自己的基礎設施提供服務&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="為什麼是-hugo"&gt;
 為什麼是 Hugo
 &lt;a class="heading-link" href="#%e7%82%ba%e4%bb%80%e9%ba%bc%e6%98%af-hugo"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;靜態產生器選項很多,我最後選 Hugo 的理由很務實:&lt;/p&gt;</description></item></channel></rss>