垃圾投稿、洗版與圍攻——保護開放的投稿表單
匿名表單對所有人開放,包括機器人、打廣告的人,以及某個鐵了心的人。本文說明濫用是怎樣出現的、哪些防禦措施不會破壞匿名,以及遇到洗版時該怎麼辦。
其他語言: English · Bahasa Melayu · 简体中文
簡短回答。 你不能要求匿名投稿者登入,所以目標是讓濫用變得代價高昂,而不是完全不可能。按網路位址和按瀏覽器工作階段設定的頻率限制、隱藏的蜜罐欄位、最短填寫時間、工作量證明,再加上把所有含連結的投稿扣下,就能擋掉大部分濫用——而這些措施沒有一項需要知道投稿者是誰。
匿名投稿表單有一個與眾不同的安全難題。對付任何網上服務被濫用,標準答案都是要人表明身份——登入、驗證電子郵件地址、繫結電話號碼。匿名專頁一樣都不能做,否則就不再是匿名專頁。它必須繼續對一無所知的人開放,同時又讓待審投稿保持可讀。
這是做得到的。它需要另一套工具,也需要接受一點:目標是讓濫用變得代價高昂,而不是完全不可能。
誰在濫用表單,為了什麼
防禦措施取決於攻擊者是誰,所以先把他們分清楚。
自動垃圾訊息。 一些程式在網上到處找有文字框的表單,往裡面塞連結——賭博網站、冒牌貨、貸款廣告。它們並不是專門針對你。它們成批出現,一眼就認得出來,也最容易擋住。
人手發的廣告。 真人把自己的店、補習服務或活動的宣傳貼進來。數量不多但很有恆心,被拒絕之後還會改寫再投。
單人洗版。 一個人投上幾十次、幾百次——有時是同一則訊息,有時是變著花樣。他可能是想靠不斷重複把某篇貼文硬擠上去,可能是想淹沒別人的投稿,也可能只是想把管理員磨到沒力氣。
圍攻。 一群人在別處——聊天群組、對頭的專頁——串連好,就某一件事大量投稿。這在學生選舉、學會之間的糾紛,以及涉及指名道姓者的爭議期間很常見。每一篇投稿都來自不同的人、不同的裝置,所以看起來像真實的民意。而這正是他們的用意。
惡意連結。 投稿裡夾帶通往釣魚網頁或惡意軟體的連結,指望管理員去點——或者更好,把它發布出去。
不需要身份的防禦措施
頻率限制
限制同一來源在一段時間內可以投稿的次數。這是最有效的單一措施,而且誠實的使用者根本感覺不到,因為他們很少一天投稿超過一兩次。
難處在於「來源」二字。最直接的選擇是網路位址,但位址是共用的。校園 Wi-Fi 上的每個人,看起來可能都來自同一個位址;行動網路更常把幾千個使用者放在同一個位址後面。嚴格到足以擋住洗版者的限制,可能連整棟宿舍都一起擋掉。
有一些務實的折衷辦法:
- 按位址設定的限制要寬鬆——每小時幾十篇,而不是兩篇;
- 另外按瀏覽器工作階段設一個嚴格得多的限制,擋住隨手重複投稿的人;
- 達到上限時,讓對方慢下來,而不是直接封鎖——等一分鐘足以讓洗版者洩氣,又不會把鄰居鎖在門外。
不追蹤人的驗證方式
CAPTCHA 能證明對面是真人,對付機器人有效。它的代價是增加阻力、給使用輔助科技的人帶來困難,以及——視供應商而定——把訪客的資料交給第三方。最後這一點,和匿名的承諾格格不入。
有一些不需要第三方的替代辦法:
- 蜜罐欄位。 一個人看不到、機器人卻看得到的表單欄位,而機器人往往什麼都填。凡是這個欄位有內容的投稿,一律丟棄。它不花錢,卻能擋掉多得出乎意料的自動垃圾訊息。
- 最短時間。 沒有人能在兩秒之內填完一份表單。比這更快送達的投稿,一律丟棄。
- 工作量證明。 投稿者的瀏覽器必須先解開一道小小的運算題,表單才接受投稿。一個人不會察覺那半秒鐘。想傳送一萬篇投稿的人,卻會發現這要花掉實實在在的運算時間。整個過程不涉及任何個人資料。
內容規則
- 扣下或去掉連結。 真正的告白很少帶網址。把所有含連結的投稿送進另一堆待審項目——或乾脆拒收連結——就消除了發垃圾訊息的大部分動機。
- 抓出重複內容。 反覆投來的相同或近乎相同的文字,可以合併成一項,旁邊標上次數。
- 兩頭都限制長度。 下限擋住空白和只有一個字的投稿;上限擋住有人貼進一整本小說。
開放時間
沒有任何規定要求表單必須全天開放。有些專頁在夜間關閉投稿,或在待審投稿達到一定數量時關閉,並明白告知。凌晨三點沒人看著的時候湧來的洗版,遠比撞上一則「投稿於早上 8 點重新開放」的告示來得棘手。
不該做的事
不要「暫時」要求登入。 你一這樣做,專頁就不再匿名,而真正的投稿者——比較謹慎的那一群——會最先離開。
不要把洗版的內容發出來。 貼出二十篇幾乎一模一樣的投稿來「讓大家看看我們面對的是什麼」,正中洗版者下懷。
不要封鎖整個網路。 封掉校園的位址區段或某家電訊公司,是為一個人的行為懲罰幾千個人。
不要用你管理專頁的裝置和帳號去點投稿裡的連結。 如果一定要檢視連結通往哪裡,就用連結預覽或掃描服務,而不是你的瀏覽器。
不要詳細公佈你的防禦措施。 「我們會限制投稿次數」沒問題。「每個位址每小時恰好可投 15 篇」就成了操作手冊。
認出圍攻
圍攻比洗版更難察覺,因為每一篇投稿單獨來看都合情合理。要留意的跡象有:
- 某個話題的投稿量突然上升,尤其是昨天還很冷清的話題;
- 許多投稿出現相似的措辭、同一個少見的字眼,或同一套說法;
- 集中在很短的時間內湧入,而且來得很突然;
- 投稿讀起來像是寫給觀眾看的,而不是寫給專頁的——工整、帶著論辯的口吻、像口號。
看到這種情況,投稿的數量並不能告訴你到底有多少人持這種看法。十個人可以發出兩百則訊息。
相稱的回應,是在話題確實符合你的規則的前提下,發布一兩篇有代表性的貼文,並公開說明收到了許多類似的投稿。不要讓數量換來比這個話題原本應得的更多版面。在選舉和糾紛進行期間,可以考慮訂一條常設規則:專頁不發布任何關於候選人或糾紛各方的內容——並在競選開始之前就宣佈,以免被解讀為偏袒某一方。
遇到洗版時
- 暫停表單(如果你的工具做得到),並附上簡短的告示。關閉十分鐘,足以打斷大多數洗版的勢頭。
- 不要逐篇閱讀。 按時間排序,找出這一波從哪裡開始、到哪裡結束,把它當作一整塊來處理。
- 留意它在掩蓋什麼。 洗版有時是為了淹沒某一篇特定的投稿,或把管理員累垮,好讓某些東西矇混過關。要仔細檢查它開始之前和進行期間收到了什麼。
- 暫時收緊限制,等它過去之後再放寬。
- 記錄下來,寫進你的決定記錄:什麼時候、多少篇、關於什麼。第二次嘗試通常會照著第一次的模式來。
當濫用是衝著某個人來的
針對某位指名道姓的個人的大量投稿,不是垃圾訊息問題。那是騷擾,而你的專頁就是對方想利用的工具。全部拒絕,連經過淡化的摘要也不要發布,並考慮是否應該讓當事人知道自己正被針對。意圖使他人困擾的反覆通訊,可能構成刑事罪行——見《在馬來西亞,人肉搜索(doxxing)違法嗎?》。
切合實際的目標
你不可能做到零垃圾訊息,而一個鎖得嚴密到足以保證這一點的表單,也就沒法用了。目標應該是:自動產生的垃圾永遠到不了人的面前,一個鐵了心的洗版者被拖慢到涓滴之流,而圍攻被如實地認出來。幾項挑選得當的措施——頻率限制、蜜罐欄位、扣下連結和一個暫停按鈕——就能做到,而且沒有一項需要問投稿者他是誰。
常見問題
不要求登入,怎樣擋住表單上的垃圾訊息?
限制同一來源在一段時間內可以投稿的次數,加一個只有機器人才會填的隱藏蜜罐欄位,丟棄兩秒之內填完的投稿,要求瀏覽器先完成一道小小的工作量證明運算,扣下或拒收含連結的投稿,併合並重復的內容。這些措施都不會識別投稿者的身份。
什麼是蜜罐欄位?
一個人看不到、機器人卻看得到的表單欄位,而機器人往往什麼都填。凡是這個欄位有內容的投稿,一律丟棄。它不花錢,卻能擋掉大量自動垃圾訊息。
在匿名表單上用 CAPTCHA 好嗎?
它對付機器人有效,但會增加阻力、給使用輔助科技的人帶來困難,而且視供應商而定,會把訪客的資料交給第三方,這和匿名的承諾格格不入。蜜罐欄位、最短時間和工作量證明都不需要第三方。
怎樣分辨圍攻和真實的民意?
留意某個話題的投稿量突然上升、許多投稿出現相同的措辭或說法、集中在很短的時間內湧入,以及讀起來像是寫給觀眾看的文字。十個人可以發出兩百則訊息,所以最多發布一兩篇有代表性的貼文,並說明收到了許多類似的投稿。
遇到洗版時,管理員該怎麼做?
暫停表單並附上簡短的告示,把這一波投稿當作一整塊來處理而不是逐篇閱讀,檢查它開始之前和進行期間收到了什麼(以防洗版是在掩蓋什麼),暫時收緊限制,並把事情寫進決定記錄。
為了擋住一個洗版的人,應該封鎖整個網路嗎?
不應該。網路位址是共用的:校園 Wi-Fi 上的每個人看起來可能都來自同一個位址,行動網路也把幾千個使用者放在同一個位址後面。封掉一段位址,是為一個人的行為懲罰幾千個人。讓那個人慢下來就好。