目錄
普通接口
http://Example.com/index.php?module=users&action=info&user_id=333
首頁 後端開發 php教程 關於PHP寫入APP介面的安全性問題探討一

關於PHP寫入APP介面的安全性問題探討一

Aug 08, 2016 am 09:23 AM
amp app http token

在探討這個問題之前,先要確認一點的是,作為一名互聯網Coder,無論你是前端或後端你都要對http請求要有一定的了解,知道http特性,要清楚的了解http裡面的Request與Response是什麼,知道為什麼網站會存在cookie,session,驗證碼的意義和必要性。因為探討APP接口的安全性就是在探討HTTP請求的安全性;

我一般把APP接口分為三類,普通接口,表單接口,會員接口;本文重點討論會員接口

普通接口

一般GET請求,例如獲取新聞列表GET http://Example.com/index.php?module=news&action=list,為了防止採集或暴力查詢,我們PC端一般做如下處理:

  1. 防止本站被它站file_get_contents,所以要辨識user_agent,如果不是透過瀏覽器來存取的話直接不給看。
  2. 如果別人透過偽造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;
關於PHP寫入APP介面的安全性問題探討一但是,我們透過抓包既可獲得全部請求頭資訊,這時可以完全模擬請求頭資訊來獲取數據;


很多APP最多到此步既可獲得該API接口的數據,而且是非常便於處理的json格式,而評論APP到此處直接返回的是一堆看上去是經過壓縮的亂碼數據:關於PHP寫入APP介面的安全性問題探討一

這有點類似於PC端gzip,伺服器端返回的是gzip的壓縮數據,而瀏覽器來解壓這個gzip來獲取真正的數據,然後再顯示出來;
我不知道點評的這個亂碼數據是否也是這個原理,如果是的話,不得不說真的是"棒棒噠",因為解壓的算法是發生在自己的APP端,這不僅保證了資料的安全性,而且還節省頻寬流量,加快的資料傳輸速度。具體是怎麼樣做的,暫時還不得而知;關於PHP寫入APP介面的安全性問題探討一
表單介面

即類似html中的from表單,主要是往伺服器提交資料的。一般是post方式的http請求,主要的危險是來自於強刷HTTP請求,撐爆資料庫;在PC端我們一般透過驗證碼來解決這個問題,而在APP端,我能想到的也只有透過驗證碼的方式,只不過PC端的是把驗證碼存進session,而APP端是存進cache裡面;但如果加上驗證碼的話,在用戶體驗上肯定會大打折扣,關於這一點肯定有更好的方式解決,具體怎麼解決,暫時還不得而知;
會員接口

所謂會員接口,就是類似

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不能遍歷對象,只能遍歷數組,他們對對象的操作一般都是通過鍵名去取鍵值。

  1. 不管是成功,還是失敗。介面必須提供明確的資料狀態訊息,並且不能回傳NULL,如果傳回NULL的話,在IOS端會崩掉。
以上就介紹了關於PHP寫APP介面的安全性問題探討一,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1676
14
CakePHP 教程
1429
52
Laravel 教程
1333
25
PHP教程
1278
29
C# 教程
1257
24
京東商城APP如何進行實名認證 京東商城APP如何進行實名認證 Mar 19, 2024 pm 02:31 PM

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

註冊香港AppleID的步驟及注意事項(享受香港AppleStore的獨特優勢) 註冊香港AppleID的步驟及注意事項(享受香港AppleStore的獨特優勢) Sep 02, 2024 pm 03:47 PM

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

瞭解網頁重定向的常見應用場景並了解HTTP301狀態碼 瞭解網頁重定向的常見應用場景並了解HTTP301狀態碼 Feb 18, 2024 pm 08:41 PM

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

中國聯通app怎麼退訂流量包 中國聯通怎樣退訂流量包 中國聯通app怎麼退訂流量包 中國聯通怎樣退訂流量包 Mar 18, 2024 pm 10:10 PM

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

Blackmagic 的專業級視訊應用程式登陸 Android,但您的手機可能無法運行它 Blackmagic 的專業級視訊應用程式登陸 Android,但您的手機可能無法運行它 Jun 25, 2024 am 07:06 AM

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

多點app如何開發票 多點app如何開發票 Mar 14, 2024 am 10:00 AM

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

此應用程式需要Windows應用程式運行時 此應用程式需要Windows應用程式運行時 Feb 28, 2024 pm 05:37 PM

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

如何使用C++實作HTTP流傳輸? 如何使用C++實作HTTP流傳輸? May 31, 2024 am 11:06 AM

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

See all articles