嵌入內容曾重創我的其中一個網站
原文由 Unattributed 于 發布,訂閱此部落格
照片由 Олег Мороз 發表於 Unsplash
前言
幾天前,Michael Harley 寫了一篇文章,叫做 How I make my blog posts more resilient。他在文章中談到許多關於維護部落格、或是任何網站的好點子與原則。讀了他的文章,讓我想起將近十年前,我在自己的其中一個網站上經歷過的一次相當嚴重的事件。
當時我雖然大致記錄了那些問題,但對於其中一個需要處理的問題,只輕輕帶過。我想,針對我當時遇到的問題,以及後來的處理方式來好好談一談,正好可以作為 Michael 那篇文章的延伸。
事件起因
2018 年,我必須對 The CerebralRift 進行一連串的調整。(你可以在我當年發表的這幾篇文章中看到相關的來龍去脈:CerebralRift Goes KABOOM!、Extreme Website Cleaning、The Long Grind Aftermath 以及 A Pair Of Post Cleanup Rants。不過我不建議你去看,又長、又愛抱怨,而且莫名地無聊。)在這裡,我想比當初更詳細地聚焦在其中一個環節上。
在進行這些調整時,我發現網站有不少問題。而且隨著我改得越多,問題反而越嚴重。(這些調整有很大一部分是搬移或移除內容,所以狀況惡化其實有點違反直覺。)很快我就明白,這情況需要更深入的調查才能解決。
我發現了什麼
我發現的問題之一,跟我在網站上使用嵌入內容有關。在我寫過的大多數樂評裡(大約 350 篇),我都會嘗試把討論的作品直接嵌入到文章中。這主要是出於貼心考量:我想讓讀者在閱讀樂評的同時,也能直接聆聽或觀看評論的對象。
然而,我發現當原始音訊或影片在網路上被搬移或消失後,有好幾個嵌入內容並沒有優雅地失效。我所謂的「優雅地失效」是什麼意思呢?
正常來說,嵌入內容在被呼叫時,應該要能檢查傳入的 URL 或 URI 是否有效。如果無效,就應該直接失效。但這幾個嵌入內容並沒有這樣做。相反地,會發生以下兩種情況之一:
- 嵌入內容會不斷嘗試載入,導致網頁永遠無法完全載入。
- 嵌入內容雖然載入了,卻產生了 12 到 16 個格式錯誤的 URI。
這影響了網站的效能,也影響了許多搜尋引擎對網站的評分(是的,那段時間我確實有在研究 SEO 原則——不過現在已經好多了)。卡住的嵌入內容會被判定為極長的載入時間,而那些格式錯誤的 URI 則會被視為失效連結。基本上,這些壞掉的連結不只搞砸了 SEO 分數,也拖累了經營網站時必須關注的各項實際技術指標。
但我還有另一個擔憂:這些行為異常的嵌入內容,有沒有可能被當成攻擊破口?我的直覺告訴我,伺服器本身應該不會有問題,但對網站的使用者來說,這可能會是一個弱點。所以,基於我這種疑心病比較重的個性,我把這些壞掉的嵌入內容視為安全問題。(老實說,我對這件事反覆糾結了很久,有時又會想,會不會有人真的能透過壞掉的嵌入內容一路回頭入侵到我的伺服器。這純粹是我疑心病發作的症狀。)
我做了什麼
我想結果應該很明顯了(尤其是如果你有看過上面提到的那幾篇文章):我把網站上 400 多篇文章一篇一篇仔細地全部檢查過一遍。(受影響的不只是樂評而已。)在這個過程中,我把所有需要更新的文章都更新、整理了一遍。
這是一個很漫長的過程。光是清理就花了我好幾天的時間。一路上,我也不斷思考未來到底該怎麼做。
新的原則
除非有極其特殊、非用不可的理由,否則第三方嵌入內容在我的網站上不再受歡迎。將近十年過去了,我不記得自己有再找到任何非用不可的理由。
還有一件事,雖然當時我沒想到,但現在看來也很值得一提。我們一直都知道,許多嵌入內容需要使用 Cookie 來在我們的系統上追蹤它們的狀態。但是,我們之中有誰真的知道這些嵌入內容在背後做了什麼?它們很有可能會在我們的系統上植入信標 Cookie,或其他可跨站存取的資料片段。
而且,就我所知(如果我說錯了請指正),目前並沒有像 GDPR 那樣、專門規範嵌入內容行為的法規。一想到這點,就讓我有點不安。
這不代表你在我的網站上就看不到媒體內容了。CerebralMix Archive 就是一個很好的例子,上面大部分頁面都有媒體播放器。但那個播放器是用純 HTML5 程式碼寫成的。它的寫法是,如果因為某些原因失效,就會顯示錯誤訊息。而且頁面上仍然保留了可直接下載媒體的獨立連結,所以即使播放器失效,使用者還是能存取內容。
在這個網站上放滿豐富媒體已成常態的時代,這項原則看起來或許有點落伍。但老實說,它讓我網站的維護變得輕鬆多了。而且,知道自己的網站上沒有藏著一顆不定時炸彈,也讓我晚上能睡得更安穩一些。
隨機一篇部落格
留言
登入後參與討論