你閱讀到付費的資料了嘛?

前言

在前幾個月的時候,因緣際會下得知有一個網路媒體網站的存在,而這個網路媒體為了要讓讀者支持這個媒體網站,因此使用使用者付費的制度,讓使用者可以透過付費訂閱的方式,讓網路媒體可以較為長久的做下去。而這個網路媒體在透過先前實習生的介紹之後,對於這個網站判定使用者與訪客是否為付費的讀者之方式深感興趣,因此研究了一陣子之後,才有這篇文章。

本文章,試著解析此網路媒體網站是如何判定訪客為訂閱付費方案的使用者方式,以及展示是否有繞過判定的方式取得付費方案之讀者權限。

作法

首先,先開啟瀏覽器並點擊一篇文章,接著將此頁面往下拉之後,就會看到下面這樣的截圖:

完整的新聞內容也部份被遮掉了,這篇的新聞內容卡在『被拆散的東西』,後面的新聞內容就沒有看到了。因此我們就從上面的截圖可以知道,這篇文章是需要有付費的會員才可以觀看的,接著我們試著使用Python 3並搭配requests來對其進行請求,相關的程式碼如下:

將『html.text』文字之內容印出之後,整個HTML回應的內容都有了,將內容輸出之後,往上拉之後,可以看到下面這樣的內容:

從上面的截圖可以發現,可以知道『拆散的東西』後面之後的內容都有印出來,因此代表我們已經繞過付費會員方案的機制,看到付費的資料了,那為什麼使用了Python 3 + requests就可以看到付費的新聞內容資料?我們可以分析一下預設請求的header標頭的資料,相關的程式截圖如下:

從上面的截圖可以知道,請求的header中的『User-Agent』為:『python-requests/2.25.1』,而連瀏覽器預設通常都是:『Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36』,為了要證明是因為User-Agent來判斷是不是付費會員,可以用Chrome瀏覽器外掛來修改User-Agent的header—User-Agent Switcher

從上面的截圖可以知道,我們新增了『python-requests/2.25.1』這個User-Agent,接著更換這個之後,就可以看到下面這樣的截圖了:

從上面部份的截圖可以知道,內容已經繞過付費的檢查機制並看到付費的內容了,所以可以得到一個結論:

  • 檢查是否為會員機制是透過User-Agent的請求header
  • 檢查是否為付費會員應該是要檢查session與cookie並搭配會員登入功能機制,這樣一來一定要註冊帳號才能夠看到付費的新聞內容

參考資料