該如何做大中型 UGC 平台(如新浪微博)的反垃圾(anti-spam)工作?

原問題:新浪微博 anti-spam 的大致規則有哪些?
原問題涉及一個產品具體的規則,沒法回答,公司秘密。


Anti-spam

@周源的邀請,我現在才回應,見諒。做反 Spam 工作的人,要禁得住誘惑耐得住寂寞扛得住壓力受得了委屈,本想路過算了。但看看互聯網上這塊內容都比較少,看到有人說自己會說些乾貨,結果找到很少,做 Anti-spam 的人不多,也時常不受重視,其實交流又非常重要,基於此,我就從產品的角度談談這塊自己的一點積累,拋磚引玉。

Anti-spam 是數據分析工作的一個方向,非常考驗一個產品人員對數據整體和局部的把握,如果對產品無愛,對數據,特別是數據的細節刨根問底不著迷,這事兒做不好。

做 Anti-spam工作,只掌握了數據分析的方法是不夠的,還要加入足夠的產品市場人員的思維——對用戶需求的分析,對用戶需求的理解,對人性的理解,多換位思考。有了這些才能真正的把基於XX產品的反 Spam 工作做好。這也是一般做了幾年反 Spam 工作後,能力提升瓶頸的關鍵點。

開始正文,先分4部分:具體工作怎麼做,如何進階,反spam產品經理還需要具備哪些能力,我個人的經驗。

1. 具體工作怎麼做
1.1 做數據分析
第一次接觸這個工作的人,一般壓力很大,都是人肉通過後台工具解決spam問題解決不了或者這個問題已經嚴重的威脅產品安全了,希望你能解決,如果你幸運的解決了一兩個問題,更希望你能成為黯淡無光黑夜裡的救星。
在很多人指手畫腳,投訴各種問題的時候,自己不要亂,一定先只做一件事件——數據分析,抽XX產品10萬個數據分析分析。
目的:了解目前整體的情況,對問題嚴重性,多樣性,有足夠的認識。
產出:分析報告,列出當前所有問題的分類情況,比例情況,嚴重性情況,每類呈現出什麼特點,給出問題解決的優先順序排序。
做完這個事情,整體情況你應該最了解,老闆再問你,你就能從全局介紹情況,然後再分類給出優先順序。一般老闆都關注最關鍵,最重要,影響最大等關鍵問題。

1.2 給出XX產品spam的定義
數據分析報告中列出所有問題,而非僅僅是spam問題,因為幾乎沒有人能在不看大量數據的情況下,就能給出這個產品spam準確的定義,如果有給出的,基本也是拍各種器官拍出來的。
給出XX產品spam的定義很重要,重要的意義有:
1.2.1 明確自己的工作範圍
做反spam工作一般開始壓力大,萬事開頭難,千萬不要一上來眉毛鬍子一把抓,貪多,定位太高,當前具體問題解決不好,贏得不了信任,以後工作很難開展。
跟反spam工作,相關的有很多,黃反監控、賬號安全、防攻擊防抓站,這每一個都是難度大不好做的工作,反spam沒有做好前,不要牽扯精力。
1.2.2 明確自己的工作目標
有了工作範圍和工作任務定義,自己的工作目標就容易定出來了,也就是你的KPI,這個很重要,spam問題只要不是瞎子都看得到,不管懂不懂都可以上來說一通自己的策略,如果沒有KPI,你就無法證明自己的工作是否有效,無法證明雖然現在問題比較多,但整體情況是在前進,變好的。
1.2.3 指導今後判定問題的標準
今後的工作中,會遇到很多灰色地帶和問題,這個定義就是你劃分是否屬於你工作範圍的明燈,也是你在數據分析中,判斷具體問題是否是spam的標準。

1.3 發現問題

1.3.1 以spam問題為導向
沒啥好說的,初期就是哪裡有問題,哪裡就有你的分析,研究。
1.3.2 全面掌握spam情況,找出主要問題
面對一個產品的spam問題,首先應從基礎數據入手,全面的掌握spam問題的類型、比例情況,最有效的辦法是:大量的基礎數據標註。這個辦法好處非常多,除了能掌握主要問題和全面的情況外,還能對spam的貼子有親生的體會,了解spamer在想什麼,慣用的伎手段有哪些,找出很多典型的例子。
1.3.3 保持發現問題的敏感性,把握spam流行趨勢
大型的數據調研有一定的周期性,獲得的結論一般關注的是主要問題,由於spam問題有著很強的時效性,反spam系統一旦出現漏洞,某一類之前可能比例較小的spam問題也很容易泛濫起來,因此保持敏感性,把握流行趨勢很重要。方法是:
① 關注spam收益高的spam案例;
這個因產品而已,但是每個產品總能找到。
② 注意用戶反饋;
任何監控和機制,總免不了有疏漏,我們也要非常注意用戶關於spam問題的投訴、反饋,用戶深惡痛絕的spam問題,往往也是危害大,容易流行起來的問題。

1.4 分析問題
一個產品中出現的spam行為,也可以看成是一種用戶需求,當然這些用戶需求從產品官方角度看是不正常的,都是以傷害絕大多數用戶體驗為代價,滿足小部分人賺錢的需求。
反spam中,分析問題最主要的目的,就是把這些一小撮害群之馬的行為從絕大多數正常行為中,抽象化、規律化、用機器能執行的語言分離出來,最終變成反spam策略解決掉。主要方法是:
? 找碴,找不容易變的碴
反spam就是找出spam行為與正常用戶行為之間的不同規律,把這些不同區分出來,區分的辦法價值的高低,主要是兩點來衡量:spamer的規律是否易變和我們區分的成本是否很低。機器最容易區別的,spamer變化成本高的不同點,就是我們要的點。
常見的4個方向
① 內容;spam行為都是以獲利為目的的,在產品里spam,最終spamer都是要把用戶、流量導入到目標網站,一般都會在內容中留下spam特徵即利益的出口。
② 行為;凡是spam能獲利的地方,spamer都希望更快更多的獲利,這就註定了spam行為一定會走發的多、發的快的路線,一定會跟正常用戶有區別。
③ 社區屬性數據,包括:發貼作者註冊時間、作者等級(新用戶、平民、會員、認證人員),spam貼子發布的連續性,spam用戶發貼在貼子頁面停留時間等等
④ 用戶之間的交互數據,這個不一一列舉。

總之,一種類型的數據,就像素描中的筆觸,數據越多,意味著你描述犯罪嫌疑人的線條越多,就越能清晰的把spam辨別出來,如果數據很少,那就很難解決複雜問題。另外,數據多了,也應該注意使用最簡單有效的數據,RD會感謝你的。

1.5 解決問題

1.5.1 優先解決主要問題

一段時期只能解決一個問題,優先解決影響面最廣危害最大的問題,這樣獲得的收益最大,同時對其他次要問題的解決也非常有幫助,甚至次要問題在解決主要問題的過程中,也會迎刃而解。

1.5.2 小數據量驗證策略效果

當spam問題發現和分析完畢後,一般一個解決策略基本成型,這時,一定要先用小規模的數據驗證一下策略的效果後,再進行策略的開發和上線。一個反spam策略無論多麼的簡單或巧妙,都要用數據去驗證效果,驗證的方法是抽小量的數據去檢驗,按照這個策略看是否能獲得好的準確率和召回率。

1.5.3 堅持低成本、低誤傷、高收益,數據說話的原則

很多反spam問題都不止一個解決辦法,哪個低成本、低誤傷、高收益我們就走哪條路,無論誰提出的想法或策略,用數據檢驗沒有問題後,才進行下一步工作。
不要一上來就想搞個智能分析打分系統,什麼貝葉斯,什麼離散系統,先一個問題一個問題的解決,一個策略一個策略的上,等你有基礎有積澱,如果還需要做這樣的系統,那就再做吧。
智能系統很難做,要很高階的RD和PM搞基一樣的配合,才能孕育的出來的生命。Spam變化很快,做智能系統解決很耗時。

1.5.4 解決問題時,以PM還是RD為主導?

一般RD珍貴,事情又多,PM RD 7 3開吧

具體工作怎麼做,講完了,其實,在這個過程中有非常多的難點,定義如何制定,數據怎麼分析,excel怎麼用等等,歡迎討論,有空我再續。

2. 如何在反spam業務上進階

當各類問題和策略的制定,做到兩位數的時候,比較少的會碰到無法解決的具體問題時,就可以開始考慮工作的進階和深入。

2.1 綜合問題把握方向

反spam工作是持久戰,spam問題也會一直有不斷有,頭痛醫頭腳痛醫腳只能解決一時局部的問題,要全面徹底做好反spam工作,把spam問題控制在一個相對低的水平,就必須每隔一段時間分析回顧這段時間所作的工作,總結經驗把握下一步方向。
一般方法:
2.1.1 首先在解決具體問題中,不斷明確解決反spam問題有哪些辦法和角度,把這些角度歸納出幾個方向。
2.1.2 回顧這一段時間裡,我們都是從哪個方向出發的,這個方向我們做的如何?是否已經做的比較徹底了?是否到了瓶頸的地方?是否存在這個方向解決不了的問題。如果有,是否需要換個角度和思路,是數據少了還是方法不對等等。
2.1.3 分析當前面臨的主要問題和spam流行趨勢
2.1.4 綜合過去的經驗和當前遇到的問題,系統的完善上一個方向,同時在適當的時候提出和推進下一個方向的開展。

2.2 反 Spam 人才業務上的培養

PM的人才培養,每個產品經理都有自己的特點,我只說一下反 Spam 業務中,如果培養的話,特別需要注意的問題。

(注釋:本文的pm不是product manager,而是product marketing的縮寫,意思是基於市場需求的產品,(而非創造需求)翻出來說,是提醒新入的pm,別上來就搞什麼管理,先把精力投入到產品研究上,product master比別的都有價值。via UBee

2.2.1 解決問題的辦法真心不止一條,教給新同學方法,不要總覺得自己的想法最靠譜,都要按照你的意思來。
2.2.2 放權,在背後做支持,發揮新同學的主觀能動性吧,做的好是他的功勞,做的不好是他的責任,讓新同學儘快的負起責任來,有利於新同學更快的獨當一面。
2.2.3 沒有做數據分析,就不要亂髮表具體策略的建議。經驗是個好東西,但會犯錯,作為資深人員,仍要注意,沒有親自看數據,不要隨便定策略,說出來很容易不靠譜。
2.2.4 把試錯的機會留給新人。每個資深產品人員想想自己是怎麼成長的,犯了多少錯,只要不是方向性的錯誤,盡量把試錯的機會留給別人,在新同學每次犯錯後引導他們去思考避免,從錯誤中學到成長。via 百度產品市場部

3. Anti-spam 產品經理需要具備哪些能力
正如之前所述,解決反 Spam 問題的辦法有很多種,所以,成功的反 Spam 產品經理各有千秋,從介紹這個行業或圈子的角度,我列一列眾多能力中的幾種,大家參考,方便大家了解或招聘時參考。不同的環境導致不同的成長路徑,不一定非要照此修鍊。
3.1 反 Spam 的數據分析能力
這是實際動手的能力,方法論都可以學可以聽,數據分析能力我覺得是一個無法傳授,只能自己實踐的能力,但在實踐過程中,也有一些總結提高的方法。
3.1.1 培養數據親切感
在熱愛這個產品的前提下,數據抽出來時,別人看到的是數據,你看到的是數據背後的用戶,用戶的需求,他們的種種行為總是給你帶來驚喜,他們需求得到滿足後,總是能給你帶來喜悅。
Spam 各種行為背後都是有著各種各樣的聯繫,產品對他們來說是黑匣子,大量數據放在一起的時候,稍微的排一下順序,規律就會顯現出來。
3.1.2 在數據分析時,不要想當然的給用戶打上標籤,也就是不要過快的判定非黑即白完事兒,而是不停問自己,他為什麼要這樣做,是一個還是很多個這樣,很多個這樣一定有原因,這樣原因可以先假設,但一定要用數據驗證假設,驗證的次數越多下次做建設的時候越容易正確。道理很簡單:熟能生巧,簡單的東西做到極致,你就像在開外掛一樣,別人看不出的規律你總能看出來。

(寫到這裡說說題外話:寫到這的時候,我想起的搜索引擎9238,搜索研究院―,一個超級到不能再超級的超級用戶、每天至少搜索上千個詞、半夜還在用產品、深夜實在累的不行了攤開睡袋睡下,大家早上上班的時候他去洗手間洗臉刷牙。成功的路上沒有捷徑,聽到、看到或者別人教你關於某個問題如何做跟自己完全掌握,之間還有數以百計個小時。)

3.2 關鍵問題的把握
做產品做久了,一起討論問題的時候,你會發現總有那麼幾個人,他們每次指出的問題都是整個問題的關鍵點,策略型 PM 這點非常重要。

3.3 全局的產品意識
3.3.1 平台型產品不用在產品設計之初特別在意反 Spam 問題,有這個意識覺悟,不要故意做漏洞,犯低級錯誤即可。

非小型UGC產品,一般都是先有了這個產品,這個產品發展到一定階段後,才出現 Spam 問題,所以在產品一開始設計之初,很難有人能考慮到反 Spam,即便有人考慮到這個問題,在產品都不知道以後能否火的前提下,反spam的需求也會因為優先順序、資源等問題擱置。再則,平台型產品初期就是要以低門檻來搶用戶,成功的運氣因素也很重要,在早期做相關的功能或限制沒有必要。
另外,反spam是問題導向,問題沒有發生,你怎麼預設問題然後去控制。

產品人員在分析用戶需求,設計產品之初,要心無旁騖的只關注如何更好的滿足用戶需求,一定要抱有N個假設,這樣才能把產品做好。這個 N 個假設里,其中兩條是:RD 是萬能的,只有成本和收益的權衡;Spam 問題不存在無法解決的問題,只有重視程度和階段的不同。

3.3.2 能深入細節,更能跳出細節看大局部,看整體。

這句話,看起來比較虛。舉個項目例子(我不可以細說),比如你解決某類 Spam 問題,時刻想著做這事兒的目的是什麼,有時候解決到80%了,是否可以換個方向審視一下,做一做,可能效果更好。

我一直打一個比方——反 Spam 需要幾十個策略,交織在一起想一張網,Spam 來了都要過這張網,當你的網策略少比較稀疏的時候,漏洞就大,Spamer 一試就知道你的大概策略,大概閾值,很容易就鑽過去,但是當策略較多,網比較密的時候,鑽過去的成本就大大提高,這就要求產品經理能細節能整體。

3.3.3 要共贏,維持生態平衡,不要傷及產品和自身。

Spam與營銷有時候只有一線之差

反Spam的目標就是把Spam控制在可以接受的範圍內,保持生態平衡,利益鏈條平衡。做的太狠,也會自損忍受閹割之痛,另外,也會有意想不到的麻煩,你懂的。

4. 我個人的一些經驗

4.1 以spam問題為導向
4.2 一段時間只解決一個問題
4.3 優先解決範圍最廣危害最大的 Spam問題
4.4 策略提出後一定要小數據量驗證效果
4.5 發揮每個人的積極性、主觀能動性
4.6 堅持低成本、低誤傷、高收益,數據說話的原則
4.7 Spam問題具有時效性,反spam更要快速有效
4.8 先下猛葯再解決誤傷
4.9 不要指望一個策略或一組策略解決所有問題
4.10 勿以善小而不為
當成本也很小的時候,一些收益看起來小的策略,在多個策略綜合起效的時候,也能帶來很大的收益。例如:在策略很多的前提下(這個前提很重要)解決某些問題的時候,關鍵詞匹配也能很有效。
4.11 人工靠不住,盡量多用機器
4.12 對數據要有親切感,樂意探究數據背後的故事
4.13 機器不夠用,人工過來補。注意是應對圖片、視頻 Spam,機器識別難度很大的問題。
4.14 注意遺漏,連連看、挖掘召回。
4.15 解決問題的路不止一條。
4.16 PM抽數據困難不畏懼。

========================================================
2016 年 8 月 2 日更新

5. 最近一些時間,在反作弊業務上,自我感覺成長不多,有什麼新的感悟,我會逐步更新在下面

5.1 如何解決誤傷問題

不同大小體量的平台解決思路不一樣

流量、用戶群比較大的平台,一般的做法是,周期性的評估誤傷,誤傷比較高的策略下線掉,再去優化策略,優化到一定程度後再上線;

優化策略一般都會面臨挖掘新的數據項的問題,在當前僅有的數據項基礎上去優化策略難度比較大,需要很認真細緻的看數據,思考策略;而挖掘新的數據項會更容易更有效。新數據項的挖掘,產品最好找到多一些的數據項,預防著有些很好的數據項工程師挖的難度比較大,就需要換。

策略評估誤傷,下線,優化,再上線,再評估……,這樣的循環做多了,需要思考如何把策略制定變得產品或運營人員可配置化,策略上下線自動化的工作。

策略可配置化,主要是要抽象化策略共同的項,由技術做成模塊,新的策略就是由這些通用的模塊搭配一些條件生成出來。產品或運營可以去組合出新策略,自由調整關鍵閾值。

體量小一些的平台,用上述的方法,可能效果不好且成本高,有點像用牛刀殺雞,而且小體量的平台往往更注重誤傷(原因:小平台正常用戶本來就少,誤傷幾個就是大事兒;小平台里當個正常用戶影響力更大,十幾個核心用戶出來反饋誤傷,感覺就是大新聞),那怎麼辦呢?

解決方案是:把處理手段做的有層次些。以前反作弊抓住了,都砍頭,砍錯了,當然壓力大;現在反作弊抓住了都把小拇指的指甲剪了,剪錯了,壓力不大。但是,剪指甲的手段也要達到反作弊的效果。追求什麼效果?第一追求:把人和機器區分開,把機器人幹掉;做不到的話,退而求其次,打斷 spam 的連續性,提高 spam 的成本吧。

這種手段怎麼做?
驗證碼就別用了,除非是 Google 那種行為驗證碼,但一般公司做不了也也捨不得花錢做,開源介面被牆了。
三個強
結合性強,要跟自身產品特性結合。Facebook 驗證你是不是賬戶擁有者的時候,會讓你填你上傳上的照片中,人臉都是誰的臉。
趣味性強,驗證有段要有趣,不然正常用戶被誤傷的時候填起來就會很頹廢。我在微博做過把你最近關注的人抽 4 個出來,把名字打亂,讓你讓頭像和名字連線連正確。
安全性強,能真正的把人和機器分開。

5.2 如何挖掘數據項

挖掘數據項是反作弊至關重要的一環,數據項多,解決 Spam 的思路就廣。

挖掘數據最關鍵是兩點:好的分類方法和注意細節的能力

好的分類方法:我的經驗是,基礎數據、社區屬性數據、用戶之間的交互數據;兩個維度:顯性數據和隱性數據。

細節數據的分析歸納能力,我的兩個經驗:多思考如果我是正常用戶使用產品一般流程是什麼;多思考如果我是作弊的我會怎麼作弊,以及多研究各種發帖機、註冊機。


我覺得如何應對spam可以很明顯的展示出一個公司的實力。原因有兩個:

  • 如何通過技術手段來做主動的自動化運營,而不是通過人工手段去被動地應對每一個突發事件,很考驗一個公司的技術能力。
  • 除非是應對「重大突發Spam事件」,否則解決Spam對公司短期的KPI沒有正面作用(有時可能還是負面的)。因此為什麼要解決Spam,怎麼Spam,解決到什麼程度,都可以體現公司的產品價值觀。

接下來就說說Facebook這個超大型UCG平台是怎麼解決這兩個問題的。

1. 技術化運營
Facebook有一套專門Anti-spam的基於機器學習的系統,叫Sigma。

  • 對於每一個用戶在Facebook網站上的每一個動作,比如發帖/點贊/評論/私信/好友申請,Sigma都會實時預測其行為的「可疑」程度。
  • 這個「可疑」程度具體又分為多個子維度,包括假帳號,被盜號,刷榜刷贊,發釣魚帖等。
  • 針對每個維度,Sigma都會基於機器學習生成一個可疑值,數值高的就會自動觸發對應的規則系統:刪號,刪帖,發郵件或簡訊來要求用戶確認帳號等。

相比起用於精準廣告,智能排序,個性化推薦一類的機器學習系統,Sigma最大的不同就是響應速度要快,在各個層面都要快:

  • 模型的訓練必須是online的,用實時的數據。否則新出現的Spam沒有第一時間體現在數據里,再好的系統也沒用。
  • 「學習率」必須要快。相對的,「準確率」就沒有那麼重要。一個2%失誤率的演算法在當天就控制住了spam,讓它隻影響了1000個用戶,遠好於一個失誤率只有1%,但到了第二天才學會正確識別spam,以至於讓它影響了10萬個用戶的演算法。
  • 模型和規則的部署要快。新的模型出來了,或者萬不得已手動加一個新規則,你如何把新的模型和規則部署到伺服器上去?在這十萬火急爭分奪秒的時刻,你總不能讓機器們輪流著重啟一遍吧。

在上述的這些獨特的技術問題之外,還有更重要的一點值得再次強調一下:Sigma不是一個獨立的模塊。它在每個用戶的每個行為都會被觸發,因此它與整個Facebook技術系統的結合要極為緊密,涉及各個環節。這對規模不大的產品來說不是什麼難事,但如果接觸過類似FB這種一個網站包含各種複雜功能的系統,應該能理解工程上的挑戰吧。對應的,如果能把這件事做好,體現的也就不僅僅是anti-spam什麼的,而是公司整體的技術工程能力了。


2. 產品的價值觀
為什麼要anti-spam?那些引誘用戶去釣魚網站的自然要解決,但那些買殭屍粉來給自己刷贊的呢?把他們做掉了,短期內產品的數據反而會降,那要不要做呢?如果做的話,目的又是什麼呢?

是為了維護社區的質量,無論這會怎樣影響短期數據。

想明白這些,對「spam」的定義就會寬泛很多。對應的,也就不能僅依靠anti-spam一個團隊來做工作,而是要求公司內的每一個產品團隊都要保持對質量的關注

舉個例子,我在Facebook時做的是Newsfeed排序,離開公司前的最後一個項目,就是和廣義上的spam有關:抓出標題黨

很多公眾號/營銷號/藍V號愛做標題黨,這事在Facebook上也不例外。然而,在FB這側,通過對比一個分享的點擊率和平均閱讀時長,很容易找出那些典型的標題黨。在新鮮事排序上對這些標題黨做降權處理,減少他們在新鮮事上的曝光量,從而控制了低質量內容在社區內的傳播。

同理,我們還會做掉騙贊的和騙轉發的。

可以看出來,做這些工作對社區絕對是好的,但對宏觀數據完全沒幫助,反而可能不利於公司與公眾號運營者們的關係。某種程度上,anti-spam天然地與KPI文化相違背。因此,anti-spam最終做得好不好,取決於公司自上向下的產品價值觀:

到底是沖數據,還是做正確的事?

------------
附:
[1]: 關於Sigma的paper: http://research.microsoft.com/en-us/projects/ldg/a10-stein.pdf


搜索的spam、微博的spam、論壇的spam、軟體客戶端的spam不太一樣。
本經驗部分來自於客戶端spam的個人經驗。
------------------
補充幾點具體的:
1.ip聚集,地理位置異常,細分視圖毛刺
2.惡意id屬性信息分析
3.惡意行為軌跡分析
4.流水log小樣本抽樣,點定人肉觀察評估
5.價值鏈分析
6.智能預警(合理劃分低於標準、正常、異常三個維度即可,不說專業辭彙了)
7.不要什麼都依賴驗證碼,另沒有不會被破解的驗證碼
##########
提高對方成本,降低自己成本
抓大放小
事前控制
實時限制
事後打擊
三十六計若干都可用
《失控》第二章吧,機器人那段。小而獨立,但有用,可復用,可被組合。求全,求系統,你就死了。人家是鑽空。


以論壇中的反垃圾信息為例, 從具體策略上說說自己的看法。

1.對每一個帳號都設定打分項,主要從帳號發布的內容、帳號的行為、與帳號的關聯因素三方面考慮。
內容因素:
首先,垃圾帳號發布的內容多半會提供一個外站的鏈接或者手機、QQ號。因此一個帳號連續多次發布的信息中如果有重複的鏈接/數字出現,他有極高的可能性是一個垃圾帳號。
其次,每個論壇都會有自己的敏感詞庫,如果不是那種最ugly的敏感詞庫,至少應該會有三層級別:
a.直接刪除內容並禁言帳號;
b.需要對內容做先審後發的處理同時監控帳號其他發布的內容;
c.內容可以先發後審,帳號不作處理。
對於前兩種情況,垃圾信息能造成的危害被降到了最低。第三種情況,就需要結合其他因素一起來判斷。

行為因素:
這裡舉一個例子來說,垃圾帳號因為是趨利,所以在行為上一定會異於普通的正常用戶。比如在論壇上它會一直不停地發帖,而正常用戶都是看帖多發帖少。這就給我們提供一個參考。通過post數量和瀏覽的url數量比值我們就能找到垃圾帳號和正常帳號的差異。

其他的關聯因素:
看到之前的回答中有提到不少,這裡補充一個:帳號所使用的主機id。垃圾帳號通常是批量註冊的,因此一個垃圾賬號背後來自同一個ip、同一個主機的其他帳號往往也都是垃圾帳號。但是這裡提出一點:不要輕易封掉ip或主機,一方面是會有誤傷,另一方面這種簡單的封殺做法會讓你的反垃圾體系變成馬其諾防線,一旦被突破,只會抬高你的反垃圾成本。

2.基於上述三方面的考慮後,我們已經擁有評估垃圾帳號可能性的幾個因素了,基於三個因素對帳號做評估。可以使用一些比較智能的演算法,比如貝葉斯公式,但這需要你能準確地統計出垃圾帳號中各個因素的佔比係數,這個模型一旦建立起來,整個反垃圾系統需要通過不斷地機器學習來對係數做調整,才可能應對垃圾帳號即時的變化。
當然,你可以有比較簡單的做法,只要某個帳號具備了其中的若干因素,就可以懷疑它是垃圾帳號了。接下來就看是否需要藉助人為的監控行為做進一步識別了。

3.驗證碼和反垃圾策略的關係
必須明確的一點是:驗證碼本身只能用來防住機器人,防不住人,更何況破解技術層出不窮,實際上抵擋機器人的效果也不完全能讓人滿意。即使你對自己的驗證碼有把握,那麼你也許能擋得住一部分機器人,但並不能把所有垃圾帳號都防住。
所以驗證碼實際上只能算抵擋垃圾信息的第一道防線,在驗證碼之後,一定要有合理的反垃圾策略。

4.反垃圾工作的確是一項長期的工作
理論上來說,當垃圾信息的發布成本高於所能得到的收穫時,垃圾信息會減少,這些發布垃圾信息的人也會選擇離開,轉而尋找其他的社區。但事實上,垃圾信息行為與反垃圾行為永遠都是一場你來我往的戰鬥,隨時注意網站的數據變化,及時找到典型的垃圾模型。才能鞏固已有的戰果。


我來說說作為一個非專業spammer的經驗,可能對anti-spam有幫助,呵呵

一年多前,新浪微博還沒有嚴抓小號,我在上面養小號,非公司行為,只是我個人對新浪微博的一種興趣。目的是發展粉絲,方法很老套,互粉。一般的操作軌跡都是,搜索,批量粉,隔天批量刪,當時用過幾個應用最給力的是互粉查詢,此外綠佛羅,我的關注管理等。關注用的最多的是手機版,不過也用過外掛。由於關注有2k上限,這種方法在粉絲達到平均達到800以上效率就下降了。互粉成功率最高的時候68%,最低12%,平均30%。這個方法在去年3月份之前都非常給力。4個小號,一個月養了8k粉絲。這些粉絲的質量可比互粉群那種貨色高多了。
我管用的方法是用美女頭像,改成某文科專業學生,去關注工科學校或者工科專業男生。女生的學校專業比男生的差一點,男生會比較有優越感。這種套路最少成功率也有25%以上吧,哈哈

我沒搞過anti-spam,結合自己用過的spam手段,淺見如下:

  1. 最基本的,使用類似的emaiil,密碼,用戶名
  2. 單個操作的次數,頻率
  3. 某種組合操作的次數、頻率。比如手機版裡面下一頁+關注以上這些人。正常人不會這麼干
  4. 多種操作的軌跡。某些操作軌跡正常人不會用。比如搜索+批量粉+下一頁+批量粉……批量刪除
  5. pv/時間、ip、ua、代理、cookie等。正常人的ip地理位置不會變化很大,不會在短時間比如幾小時內頻繁變換,不會頻繁清空cookie
  6. 操作的深度/廣度。如果把所有頁面和功能畫成一張地圖,正常用戶會走得更全面,深度和廣度有正常的範圍。而spam為了某個目的,往往只用少數頁面,少數功能,並且深度遠大於廣度。這樣即便操作的頻率降到很低,時間長了還是會累積出spam本色
  7. 操作的離散度。同樣用到10個功能,正常人的隨機性很強出現概率有明顯的正常比例。而spam往往一段時間用a功能,一段時間用b功能,很集中。因為spam不管是人肉操作還是外掛操作,都是批量操作的。
  8. 當然最重要的還是從業務和人性層面出發,在招惹spam的功能點上強化anti-spam能力。搞spam肯定有明確的目的,無非就是為名為利。

重點就應該是收集數據

我倒覺得,作為這些公司,應該盡量設計良好的交互模式,引導用戶幫忙舉報垃圾用戶,在初期就建立完善的spam資料庫。同時,這個資料庫應該盡量詳細的記錄每個spam帳戶/spam信息的一些特徵,以供以後做機器學慣用。

一來,收集數據,是一件一勞永逸的事情。不管怎麼說,在清除spam之前,盡量把他們的特徵記錄下來。之後你愛怎麼玩怎麼玩,愛扔給人就扔給人來做,愛扔給機器學習就扔給機器來學習。但如果你不及時建立資料庫,以後可能會後悔。所以在網站建立的初期就得考慮這個問題

二來,不要永遠低估機器學習的能力,現在主流的anti-spam email學術論文都能達到90%以上的正確率,更別說那些擁有大數據的商業公司

三來,無論信息量大小,任何時候,靠人工來審核垃圾信息,我覺得都是沒前途的。


貼一個兩年多以前的文章吧,相信並不完全過時。

-------------------------------------------------------


《談談反垃圾》


由於常年從事用戶產品的開發工作,工作中難免遇到過各種各樣反垃圾的事,一回生二回熟,在摸爬滾打的對抗中,也摸出了一些門道,此文算是對個人經驗的總結,非專業視角的分享。

這裡說的垃圾主要針對諸如垃圾評論,機器註冊,機器刷介面等等。

反垃圾很重要的兩步是:垃圾識別,垃圾處理(包括預防)。


【垃圾識別】

對於判別垃圾,通常有下面一些方法。


1.基於內容的識別

在基於內容的判別上,最直接的是關鍵詞過濾,比如包含「開發票」、「激情視頻」這類詞的極有可能是垃圾內容,我們通過字元串匹配來判斷是否有這類關鍵詞。這裡有一個難題,如果是檢索一段內容是否包含某一個詞還算簡單,有很多演算法可以實現,比如經典的KMP演算法,很多語言內置的字元串查找方法效率也很高。但是,要判斷一段內容是否包含一堆關鍵詞中的某一個或某幾個,那就有一些難度了,總不能循環一遍所有關鍵詞挨個做匹配吧,所以此法必不可取。

這裡推薦兩個方法,一個是基於trie樹的關鍵詞樹,具體有沒有開源實現的不清楚,我們使用中是自己基於Memcached改了一個,保留Memcached的簡單協議,修改內部邏輯為trie樹的查找,簡單來說就是將關鍵詞做位元組切分,建立一棵trie樹,判斷一段話中是否包含這些關鍵詞,只需要從根節點向下檢索即可。

另外一個方法,是利用貝葉斯演算法來進行垃圾概率計算。貝葉斯演算法這裡就不多展開說了,其原理簡單來說就是,收集一組正常內容和一組垃圾內容,用此內容對系統進行訓練,讓系統能夠知道每個詞在正常內容中和是在垃圾內容中的概率。做完訓練後,再有一段新內容過來,可以直接對其中的詞進行綜合加權計算,得出整段內容是正常或垃圾的概率。


2.基於特殊內容的識別

上面是純粹基於隨機內容的識別,而實際上我們可能還有一些省力的方法,比如一般的垃圾內容經常會有下面一些特徵:帶鏈接(因為要把用戶引導到自己的垃圾網站),帶圖片(為了更醒目),帶數字串(比如QQ號,電話號等等),通過這些特徵做字元串匹配也是一個好方法,而且就個人經驗來看,還比較奏效。其中需要注意的一點就是,上面的鏈接、數字串這些,通常攻擊者都會搞一些變體,不會直接寫鏈接和數字讓你判斷。比如換成中文數字和字母,你知道,UTF8是很博大精深的。比如:1?2?3?4?5?6?7?8?9?0? 這種。所以判斷規則上需要多做一些兼容,比如把這種東西先全轉成數字來判斷。


3.基於請求方式的識別

另外,垃圾畢竟是通過我們暴露給用戶的各種介面進來的,而攻擊者請求我們介面的方法難免與真實用戶有差距。比如說,正常用戶會先進入註冊頁面,再填表單,再提交註冊按鈕。但是惡意註冊程序,很可能是不會先訪問你的註冊頁面的,而是直接請求註冊介面(利用這一點我們就可以作文章,比如對用戶訪問路徑進行記錄,如果未訪問頁面就直接請求介面的,判為惡意請求)。另外就是攻擊者的http頭信息,比如最常見的,UA欄位是否是cUrl或者其它非正常瀏覽器。或者像很多前端團隊都有在請求url上添加隨機數的習慣,這樣本來是為了避免後端緩存,但有些低水平的垃圾請求會原樣的每次都用同一個隨機數,這就很容易識別他們了。總之,從http請求的層面可識別的東西很多,只要攻擊者偽裝有一點紕漏,咱們就可以抓到他的尾巴。


4.基於請求主體的識別

如果我們遇到UGC內容的垃圾攻擊,那麼發起請求的肯定得是一個正常用戶(如果是匿名社區請忽略此條)。這時候,內容發送主體的信用級別,就可以轉移為對信息質量的判別上來。就像我們都懂的,某些大的平台也會對不同用戶執行不同的審核策略(比如都知道的先審後放,還是先放後審),這也需要我們對內容發布主體有充分的信用分級。比如,一個註冊24小時內的用戶相對一個註冊三年發帖無數的用戶來說,信用等級就低得多。


5.基於內容載體的識別

垃圾內容之所以能形成黑色產業鏈,通常絕不會是惡作劇玩玩而已,所以跟互聯網最傳統的廣告模式一樣,垃圾也希望能夠多曝光,多賺點擊。那怎麼做呢,通常就是選擇在用戶扎堆的地方去發。比如時下熱門的電視劇,熱點的新聞事件下面就是垃圾流量的公共廁所了。另外,在一些政治軍事內容版塊發反動言論,在一些娛樂美女內容版塊發成人網站,這些也都是常用的路數。總的來說就是,同樣一條內容,在熱門版塊發布,更有可能會是垃圾內容,需要我們更多的關注。


【垃圾處理】

好吧,上面說了一大堆的方法去給內容和用戶評級,以便我們能夠對一個用戶或者一段發布的內容進行預估,那麼,在我們了解了一個用戶或者一段內容是否可能是垃圾後,我們腦子裡首先蹦出來的可能就是:封殺!但實際處理方法可能不僅封殺一種,下面我們就來探討一下對垃圾攻擊的幾種處理方法。


1.制定封殺方法

如果我們已經確切掌握了垃圾流量的規律,比如某一個IP或一組IP,比如同一組參數,比如內容總是包含某網址的變體,那麼我們就可以直接大開殺戒,用這些特徵直接進行封殺操作。


2.制定審核級別

順著上面的思路,我們可以對不同的用戶和內容施加不同的審核策略,比如是直接放行、先審後放、先放後審還是直接斃掉。我們還可以對用戶施加不同的限制策略,比如新註冊用戶每天只能發3條內容(在審核通過一條後又可以再發)。


3.工作量證明

工作量證明是一個在反垃圾郵件中的方法,最近火得不得了的比特幣,工作量證明也是其核心理論支柱之一。通過引入工作量證明方法,我們甚至可以不用對垃圾流量進行判別。只要加一道隱形的門檻,就足以讓很多攻擊者卻步。

舉個例子,如果攻擊者原來只需要請求一次介面就能夠發布一條信息,現在我們需要他在介面請求之前先填一個驗證碼,他就沒那麼容易自動狂發內容了。上面這個邏輯大家都能理解,也確實能奏效,但是很抱歉,這樣做很傷用戶體驗,產品經理說不行。

那我們換一種做法,我們讓用戶在請求前先做大約10w次的md5運算,普通用戶的機器偶爾進行一次這樣的計算不算什麼,但是對攻擊者來說,它需要單機發布大量內容,如果我們要求每條內容都需要做10w次md5的話,對的硬體資源是很大的挑戰,也是讓他放棄對你網站進行攻擊的一個方法。


當然,如果我們直接用上面的10w次md5的方法,我們在服務端也需要做同樣多的工作才能對傳入的介面進行驗證,對我們伺服器本身也是很大的挑戰。所以上面只是一個為了讓我們理解的例子,通常的做法是,服務端給定一個隨機字元串 s1,客戶端需要找到一個數 d,這個數要滿足下麵條件:這個數追加在這個隨機串後同組成一個新串 s2,這個新串進行md5後,前5位都要是0。大家可以想一下,要達到這樣的標準,客戶端需要不斷循環來尋找這個合適的d,而服務端驗證卻是只需要進行一次md5就可以了。這就是所謂的工作量證明。


4.請求籤名

請求籤名也是一個省時省力的好方法,前後端約定一種hash演算法(最好是自創的),前端對請求內容進行簽名,後端驗證簽名。通過對前端代碼進行混淆,讓攻擊者很難實現你的hash演算法。增加他的攻擊成本。


5.查出源頭

發垃圾內容的攻擊者通常都不會用自己機器或伺服器IP(要不你就賺到了,直接封IP就行了),而是用手裡控制的肉雞或者掃描來的http代理來做,其實識別肉雞和代理也比較簡單,最直接的方法就是看看開沒開著80、8080、3128等埠。這是一般代理的常用介面,另外一般情況下被拿下的肉雞也都是web介面防範不嚴造成的。如果是普通http代理,很可能會很有良心的通過x-forward-for,或者x-real-ip等http頭信息把源ip傳給你,而對於肉雞找到肉雞,如果你的黑客水平夠,你可以直接也黑上去,看看是哪個IP在控制它,從而查到真實IP。查到攻擊者的真實IP後如何處理就看你的了,是聯繫攻擊方和平解決,直接報案還是把攻擊者給黑了。那就看個人想法和水平了。


【策略與戰略】

上面說了一堆戰術層面的東西,下面聊一點戰略上的原則。


1.反垃圾是一場成本的較量

反垃圾,其實不是一項技術競賽,更不像是個人恩怨,更多的是成本較量。 如果你的網站流量大,但防護措施做得不夠,那垃圾流量過來是必然的。我們所有的反垃圾策略只有一個目的,就是增加攻擊者的成本,當成本上升到某一閾值時,攻擊者會發現在你的網站玩太費勁,投入產出比太低,於是會去找同類型的其它網站。所以就像獅子和羊群一樣,只要不是跑得最慢的那一隻,就能逃過獅子的爪牙。


2.多數攻擊者痛點在IP

無論是用代理,還是肉雞,攻擊者的IP資源總是比較有限的,所以收集到足夠多的IP進行封殺,通常能夠解決大問題。


3.實而示之虛

上面說反垃圾是一場成本較量,但在我們實際操作中,卻要盡量避免真正的較上勁。比如當你發現了惡意請求的規律,如果你選擇直接對此規則的請求返回404,那麼攻擊者也會馬上知道它的攻擊特徵被你發現了,從而迅速進行升級對抗。但是如果你只是讓他的操作無實際效果,但還照樣返回「註冊成功」、「發布成功」,那麼攻擊者可能會麻痹大意很長時間才會發現。正如《孫子兵法》中說的:「實而示之虛」。實際上在垃圾與反垃圾的較量中,最忌諱的就是無止境的軍備競賽。


4.發現特徵之釣魚策略

有的攻擊者很高明,能夠將自己的請求偽裝得得正常用戶一模一樣,所有的http頭信息,請求參數,都完全模擬。對於這樣的攻擊者,我們有什麼辦法抓到他的尾巴呢。這裡給大家介紹一種釣魚策略。首先你修改一下你的網站的前後端邏輯,比如前端增加某一個參數,後端判斷沒有這個參數請求就會失敗,這時候攻擊者馬上就會發現自己請求失敗了,通過對正常請求的抓包,他很快發現你增加了一個參數,那他會跟著進行修改。這時我們讓他爽幾天。然後偷偷地把這個無關緊要的參數撤掉。這時候,所有正常用戶請求中都不會有這個參數了,但是,攻擊者不會時時關注我們的請求參數,所以還會在一段時間內,繼續加上這個參數請求。這時釣魚成功,正是我們的好機會,在這段時間內,我們可以盡量收集垃圾的IP,發布賬號等信息。等收集到一定程度一起封掉(當然,這裡的封掉也不要暴力封掉,而是讓看起來沒有被封掉)。


總的來說,反垃圾工作其實不是一個技術活,要求更多的是細緻、謹慎與耐心,希望上面東西對你有用。


作為一個職業垃圾生產者3年半。一直在生產垃圾,感覺在這場戰爭中,anti-spam一方一直處於弱勢。隨便說說anti-spam面臨的一些問題吧。

0. anti的程度問題。趕腳現在已經很難用程序來封住spam了。而且anti-spam很多時候是 殺敵一千、自損八百。想想2年前的百度知道,好多正常的問題和答案都被刪了。想想美麗說,刪的太多,搜索引擎感覺自己被忽悠了,開始給美麗說降權。
1. 另外,傳統的驗證碼和ip封鎖,意義已經不大了。驗證碼有專門打碼網站、ip有代理(自己taobao搜索一下就知道了)。
2. 你知道有種叫按鍵精靈的東西,在很大程度上可以模擬人。尤其是基於瀏覽器的網站、因為js的許可權問題,所以更容易被騙過。
3. 你知道有一種東西叫做軟文。現在各大門戶網站上都有,花錢就能發。其實也是一種spam。軟文的界定非常難。有的人是真心推薦某個東西,你怎麼判斷呢?

我自己一直做群發。就發幾個鏈接吧(這肯定不是我發的,要不我就不貼出來了):
找小姐 inurl:www.zhihu.com/collection_百度搜索
site:www.4shared.com_百度搜索
在這燈光搖曳的舞池中央 伴隨著動人心弦的音樂 來跟著我的節奏 大家一起搖起來好嗎QQ炫舞

-----
ps:對現在的百度SEO已經絕望了。百度anti-spam演算法,真的是弱爆了。lee也不用裝逼了,整天說改什麼演算法,哎。
ps2:不喜勿噴,請默默摺疊。誰也不願意做個垃圾生產者。千里迢迢,背井離鄉,混口飯吃,實屬無奈,見諒。

------update 2014-04-01-----
很早以前的回答了。去年夏天答主已經轉行做iOS開發了。現在就職於某跨境電商平台,職位iOS開發。

------update 2015-12-06------
很早以前的回答了。今年夏天答主已經轉行,不做iOS了。現在就職於某非著名創業公司,職位大前端開發。


相信大平台對於antispam都已經有相對成熟的探索和模式,而大部分的中小型論壇/網站/社交產品等,尤其是UGC產品,在這一塊兒所能做的還是基礎的過濾加人工的操作。論壇貌似有相應的標準組建可以進行一些基本的關鍵詞過濾等,但對於社交產品評論模塊的垃圾,尤其是不斷更新的小廣告,尋求比較高效可行的處理方式,成長期團隊本身也不能花太多精力在這塊兒。

引用知乎山口百小惠的回答:
用戶自主生產的內容確實良莠混雜,要想解決這些問題其實需要專業的反垃圾來做。
由於垃圾信息變體非常多,反垃圾的
技術要求也更高。文字需要考慮符號、漢語變體、拼音以及各類樣本,圖片則難度更高,需要對圖片進行精確識別。對產品來說,反垃圾系統的響應時間、過濾的准
確度都非常關鍵。僅靠人力去過濾效率是非常低的,機器的過濾才是關鍵,但這對技術要求非常高。
另外還想多說一句,創業型公司組建團隊做反垃圾項目其實是非常佔用人力的,反垃圾的難度決定了它對技術實力的要求,大公司相比來說更有實力和資金進行技術研發。我接觸到的大多數內容的反垃圾都是由外包團隊做的。而目前國外別做的比較好的如
pic check,國內如網易的易盾等,技術實力都比較強。

打算試用看看,易盾這個如果是網易的話應該還不錯,郵件反垃圾畢竟比較出名。不知道可行不可行。產品本身的廣告類垃圾是最多的,還是要試試看才知道吧。
還有沒有更好的推薦或者經驗分享交流。
也要考慮成本。


看到第一個答案都不敢答了,我從技術方面簡單說一說。但是先要說清楚,我沒有處理過任何平台的spammer。
Anti-spam 在反垃圾郵件領域已經非常成熟了,一方面是因為垃圾郵件的特徵相對集中,分類準確率可以做到很高;另一方面是因為用戶發現垃圾郵件會拖到垃圾郵件箱,自然訓練資源多,發垃圾郵件效果可以越做越好。
SNS 領域,我見到的垃圾用戶主要有幾種,比如發廣告的、發鏈接的、來自應用的。對付哪些 spammer, 用什麼手段對付 spammer,這些都是要從產品角度考慮的問題。比如你發現某個賬號是個 spammer, 最溫柔的手段就是以後每次登陸都要求驗證碼。
從技術角度,如果簡單抽象成0/1分類,那麼要做的就是發現更多、更有鑒別力的特徵,輔以較好的分類器。通過一部分人工標註和在用戶數據上不斷的調優,達到較好的效果。這方面第一個答案的1.4里列舉了很多了,不多說。
每一個 SNS 有自己的語言生態, 固然有些 spammer 是有組織、多平台的,但是畢竟無法全盤照抄。再者,spammer 絕對是會進化的,spammer 與 anti-spam 是相生相剋此消彼長的關係,不要指望一勞永逸解決問題。既然選擇了給用戶一個相對清凈的環境和好的用戶體驗,就得長期做下去,適應 spammer 的變化。


讓對方的成本高於收益。


有用網易易盾反垃圾雲服務嗎?


作為一個非專業anti-spam談談看自己的觀點哈。
註冊微博時時間比較早,用戶也不多,自然也沒什麼垃圾信息,也是一直以來堅持使用的原因,但是現在的微博確實是魚龍混雜,良莠不齊。很多人認為社區應該首先給自己定好調,通過引導用戶從而提高社區氛圍。然而事實上是遠遠不夠的,公司花費的人力物力難以抵擋浩浩蕩蕩的水軍大隊,針對這一類的ugc產品,個人認為可以嘗試和郵箱反垃圾取得合作,畢竟反垃圾在郵箱行業已經非常成熟了,例如樓上的推薦的網易易盾也是沿襲郵箱反垃圾的經驗做下來的。


推薦閱讀:

TAG:新浪微博 | 反垃圾(Anti-Spam) |