關於PHP寫入APP介面的安全性問題探討一
在探討這個問題之前,先要確認一點的是,作為一名互聯網Coder,無論你是前端或後端你都要對http請求要有一定的了解,知道http特性,要清楚的了解http裡面的Request與Response是什麼,知道為什麼網站會存在cookie,session,驗證碼的意義和必要性。因為探討APP接口的安全性就是在探討HTTP請求的安全性;
我一般把APP接口分為三類,普通接口,表單接口,會員接口;本文重點討論會員接口
普通接口
一般GET請求,例如獲取新聞列表GET http://Example.com/index.php?module=news&action=list
,為了防止採集或暴力查詢,我們PC端一般做如下處理:
- 防止本站被它站file_get_contents,所以要辨識user_agent,如果不是透過瀏覽器來存取的話直接不給看。
- 如果別人透過偽造user_agent來存取的話,就透過單位時間ip的存取量來控制抓取方,可以寫一套演算法,如果再一個ip在前後一分鐘多於多少次訪問量來處理。但是,會有一種情況,即某個小區或公司內都是使用某一個IP的外網的話,這樣搞就會自尋死路,所以還要配合瀏覽器中的cookie來處理
總結: 請求頭可以偽造,IP位址可以變更,cookie可以清空,基本上PC端是很難防這個問題的,例如淘寶,點評等大站的資料我也是常去採的。
那APP端如何處理這個問題呢?我們可以抓點評APP的http請求包來看一下:
<code>GET http://114.80.165.113/mapi/ugcuserfeeds.bin?filtertype=5&userid=129059048&token=73114c7e9a4485319542039cdff854d989f61e5821d306b3abf0fc9904eb51ff&start=0 HTTP/1.1 Host: 114.80.165.113 Accept: */* pragma-appid: 351091731 pragma-newtoken: c2032338f6abf96c8e2984db1655f2bac73b88f799e49aab4a426d414f994b5f pragma-token: 73114c7e9a4485319542039cdff854d989f61e5821d306b3abf0fc9904eb51ff pragma-dpid: 9214560561001942797 pragma-device: 566fe5aeb75a827967fbad8356608134ba98a4a6 Proxy-Connection: keep-alive pragma-os: MApi 1.1 (dpscope 7.5.0 appstore; iPhone 8.3 iPhone7,1; a0d0) Accept-Language: zh-cn network-type: wifi User-Agent: MApi 1.1 (dpscope 7.5.0 appstore; iPhone 8.3 iPhone7,1; a0d0) Paros/3.2.13 </code>
當你直接訪問http://114.80.165.113/mapi/ugcuserfeeds.bin?filtertype=5&id? =129059048&token=73114c7e9a4485319542039cdff854d989f61e5821d306b3abf0fc9904eb51ff&start=0
的時候,直接從伺服器端擋住或直接從伺服器端給一般x,我們也可以在設定項中根據與客戶端開發人員約定的某些自訂的Request頭資訊,例如上面的parama-*,在伺服器設定項中可以取得到這些自訂的Request頭資訊,然後根據是否為約定好的Request資訊,如果不是就rewrite到450;但是,我們透過抓包既可獲得全部請求頭資訊,這時可以完全模擬請求頭資訊來獲取數據;
很多APP最多到此步既可獲得該API接口的數據,而且是非常便於處理的json格式,而評論APP到此處直接返回的是一堆看上去是經過壓縮的亂碼數據:
這有點類似於PC端gzip,伺服器端返回的是gzip的壓縮數據,而瀏覽器來解壓這個gzip來獲取真正的數據,然後再顯示出來;
我不知道點評的這個亂碼數據是否也是這個原理,如果是的話,不得不說真的是"棒棒噠",因為解壓的算法是發生在自己的APP端,這不僅保證了資料的安全性,而且還節省頻寬流量,加快的資料傳輸速度。具體是怎麼樣做的,暫時還不得而知;
表單介面
http://Example.com/index.php?module=users&action=info&user_id=333
的請求,然後伺服器端直接根據user_id來做相應的會員操作,這是及其危險的接口處理,等於把當前的會員系統全暴露出來了,只要對方改一下user_id既可操作所有會員對應的接口。通常在PC端,我們是透過加密的cookie來做會員的辨識和維持會話的;但是cookie是屬於瀏覽器的本地儲存功能。 APP端不能用,所以我們得透過token參數來辨識會員;而這個token該如何處理呢? 首先,先說說在做該介面加密前,我一共經歷的四個方案:
與APP端開發人員約定特定的md5組合演算法,然後兩端比對一下,如果相同就allow ,不相同就deny;
但是,這也是不安全的,如果APP程式被反編譯,這些約定的演算法就會暴露,特別是在安卓APP中,有了演算法,完全就可以模擬介面請求通過驗證;方案二
資料庫會員表的password是帶上了隨機密竄並經過雙重加密的md5值;在用戶登入的時候,我回會員對應的uid和password,password雖然是明文的,別人知道也不能登入,畢竟是經過加密的,然後每次請求接口的時候user_id=333&token=aa37e10c7137ac849eab8a2d5020568f
,通過主鍵uid可以很快的找到當前uidomple 到然後比對非常匹配的,抓包的人雖然不能透過密文密碼來登入該會員,然而一旦知道了這個token,除非用戶更改密碼,否則也可以一直透過這個token來操作該會員的相關介面;
通過對稱加密演算法,該加密演算法對
uid+網站公鑰進行時效加密,在一定時效內可用。當會員登入成功時,伺服器端對該ID加密後返回給客戶端,客戶端每次請求介面的時候帶上該參數,伺服器端透過解密認證;
但是這樣做,也是不安全的。因為,防外不防內,聽說這次的攜程宕機就是因為內部離職人員的惡意操作。內部不懷好意的人員如果知道相應的算法規則後,就算沒有數據庫權限,也可以通過接口來操作相關會員;
會員登錄的時候請求登錄接口,然後服務器端返回給客戶端一個token ,該token產生的規則是
網站公鑰+ 當前uid + 當前時間戳+ 一段隨機數雙重加密,根據需求決定是把該token放進cache等一段時間自動失效,還是放進資料庫(如果要放進資料庫的話,單獨拎出一張表來,順便記錄用戶的登錄,登出時間),在用戶登出登錄的時候改變一下,確保該token只能在用戶人為登出登錄之間有用。
為保安全,應確保讓使用者在一段時間內自動退出;此方案配合Linux和資料庫的權限管理可以防外又防內;
- 資料格式最好使用JSON格式數據,因為JSON有較好的跨平台性。在生成JSON的時候,要注意json的兩種格式:對象(字典) 與數組;mobile端開發語言中沒有類似PHP中的foreach不能遍歷對象,只能遍歷數組,他們對對象的操作一般都是通過鍵名去取鍵值。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

京東商城APP實名認證怎麼搞?京東商城是許多朋友常用的網路購物平台,大家在購物前,最好先進行實名認證,這樣才能享受到完整的服務,獲得更好的購物體驗。以下帶來京東商城實名認證方法,希望對網友們有幫助。 1.安裝並開啟京東商城,接著登入個人帳號;2、然後點選頁面下方【我的】,進入個人中心頁面;3、之後再點選右上角的【設定】小圖標,前往設定功能介面;4、選擇【帳號與安全】這一項,來到帳戶設定頁面;5、最後再點擊【實名認證】選項,前往填寫實名資訊;6、安裝系統要求填寫個人真實信息,完成實名認證

在全球範圍內,Apple公司的產品和服務一直備受用戶喜愛。註冊一個香港AppleID將帶給用戶更多的便利和特權,讓我們一起來了解一下註冊香港AppleID的步驟以及需要注意的事項。如何註冊香港AppleID在使用蘋果設備時,許多應用程式和功能都需要使用AppleID進行登入。如果您想下載香港地區的應用程式或享受香港AppStore的優惠內容,那麼註冊一個香港AppleID就非常必要。本文將詳細介紹如何註冊香港AppleID的步驟以及需要注意的事項。步驟:選擇語言與地區:在蘋果設備上找到「設定」選項,進入

掌握HTTP301狀態碼的意思:網頁重定向的常見應用場景隨著網路的快速發展,人們對網頁互動的要求也越來越高。在網頁設計領域,網頁重定向是一種常見且重要的技術,透過HTTP301狀態碼來實現。本文將探討HTTP301狀態碼的意義以及在網頁重新導向中的常見應用場景。 HTTP301狀態碼是指永久重新導向(PermanentRedirect)。當伺服器接收到客戶端發

中國聯通app能夠輕鬆的滿足大家的使用,多樣的功能,解決你們的需求,想要辦理各種業務,都可以在這裡輕鬆的搞定,有不需要的都可以在這裡及時的退訂掉,有效的避免後續的損失,很多人在使用手機時,有時感覺流量不夠用,就購買了額外的流量包,但下個月又不想要要,就想要馬上的退訂掉,在這裡小編為大家提供退訂的方法,讓需要的朋友們,都可以來使用起來! 在中國聯通app中,找到右下角的「我的」選項,點擊它。 在我的介面裡,滑動我的服務一欄,點擊其中的「我已訂購」選

Blackmagic Design 終於將其廣受好評的 Blackmagic Camera 應用程式帶到了 Android 平台。專業攝影機應用程式可免費下載,並提供完整的手動控制。這些控制旨在讓您更輕鬆地獲得專業級 cin

發票作為購物憑證,對於我們的日常生活和工作都至關重要。那麼我們平常在使用多點app進行購物的時候,如何在多點app中輕鬆開立發票呢?下文中本站小編將為大家帶來詳細的多點app開立發票詳細操作步驟攻略,想要了解的用戶們千萬不容錯過,快來跟著文本一起操作了解一下吧!在【發票中心】點選【多點超市/自由購】在已完成的訂單頁中選擇需要開立發票的訂單,點選下一步填寫【發票資訊】,【收件者資訊】,確認無誤後點選提交過個幾分鐘後,進入收件信箱,打開郵件,點選電子發票下載地址最後,下載列印電子發票

WindowsAppRuntime或WinRT就像微軟建立的工具箱。它幫助開發人員在許多設備上建立和運行應用程序,如電腦、平板電腦、手機、Xbox等。在執行應用程式時,如果您收到此應用程式需要WindowsAppRuntime的錯誤訊息,請遵循此貼文以解決該問題。為什麼會出現此錯誤? WindowsAppRuntime是一個強大的工具,可以幫助開發人員在各種裝置上建置和運行應用程序,包括電腦、平板電腦、手機、Xbox和HoloLens。如果您收到提示需要WindowsAppRuntime來執行

如何在C++中實現HTTP流傳輸?使用Boost.Asio和asiohttps客戶端程式庫建立SSL流套接字。連接到伺服器並發送HTTP請求。接收HTTP響應頭並列印它們。接收HTTP回應正文並列印它。
