應用程式安全開發注意事項
新浪安全部門一直致力於推動開放平台上的產品安全,使微博應用程式擁有更好的使用者體驗和具備更安全的功能。從目前的情況來看,我們發現部分應用程式存在以下幾種常見的安全漏洞或缺陷,這些漏洞除了對應用程式本身帶來影響外,也會為使用者帶來損失。
app secret洩漏
app_secret是應用程式請求開放平台產生access_token的唯一認證,使用app_secret目的是確保應用程式是開發者本人在使用。
不同的應用程式在開放平台擁有不同的介面呼叫資源和API權限。如果該應用程式的介面資源被盜用,進行發布垃圾資訊和加關注等惡意操作,開放平台會對應用程式的資源和權限進行限制,這樣會直接影響到該應用程式的正常API的呼叫。因此,對於開發者來說,有必要保護自身應用安全,相應的安全資源不會被非法使用,從而保障應用程式的正常運作。
建議把app secret保存在應用程式服務端,為了更好的保護你的應用程式安全,建議在管理中心/安全設定中綁定應用程式的伺服器ip。
如果發現應用程式的app secret被洩露,請立即到應用程式管理中心進行重置
http://open.weibo.com/apps/
app secret洩漏的常見原因:
1、app secret出現在頁面原始碼或url中,導致直接查看原始碼即獲得。
2、app_secret保存在客戶端本身程式中,所有的本機應用程式(如iOS,Android或Windows桌面應用程式),都可以反編譯的程式碼取得。
3、未使用HTTPS安全傳輸協議,攻擊者透過網路嗅探獲得。
access_token洩漏
access_token是用戶透過應用程式存取開放平台的會話標識,應用程式要做好保護工作,防止被第三方竊取。
常見的access_token洩漏路徑:
1、access_token保存在cookie或頁面程式碼中,攻擊者透過xss漏洞竊取使用者token。
2、應用程式伺服器存在sql注入漏洞,導致用戶token外洩。
綁定微博用戶CSRF漏洞
#如果你的應用程式有自己的帳戶體系,並且有綁定微博使用者登陸這個功能,請檢查綁定介面是否有防止CSRF攻擊的功能。授權介面state參數的可以用來防止授權流程CSRF攻擊,具體詳細的使用方法,可以參考最新版SDK程式碼,https://github.com/ElmerZhang/WeiboSDK。
加上關注發微博CSRF漏洞
關於CSRF漏洞的更多介紹可以參考這裡。 http://baike.baidu.com/view/1609487.htm
微博應用的CSRF漏洞常見於加關注和發微博等寫入介面處,用戶看到的現像是微博多了一些莫名的關注,或是轉發了一些行銷微博。
開發者可以透過檢查referer是否合法或在表單中加入csrf_token方式來防禦CSRF攻擊。
使用者身分偽造
完成OAuth 2.0授權認證後,應用程式可獲得像徵使用者身分的access_token,一般直接用於介面呼叫。但部分應用需要取得使用者的uid,作為同自身帳號體係做關聯的認證憑證,以提供更多應用自身的服務內容。典型情況如使用了微博sso sdk的手機應用、網路儲存服務型應用。
在此場景下,常見的漏洞有:
1、 用戶端直接以授權介面傳回的uid或提取access_token中的uid,回傳應用自身伺服器作為認證憑據。此傳輸過程可被非法攔截,透過竄改uid偽造使用者身分。
2、 用戶端將access_token回傳自身伺服器,伺服器提取其中的uid作為認證憑證,但並未校驗該access_token的合法性。此時,透過騙取A用戶授權X應用,取得access_token後傳入Y應用伺服器,便可拿到Y應用程式的A用戶憑證,存取Y應用程式中該用戶的服務內容。
修復建議:
1、 不要直接使用沒有授權資訊的uid來換取自身服務的認證憑證,只能使用access_token進行。
2、 伺服器端擷取access_token中的uid,需呼叫開放平台的OAuth2/get_token_info介面。使用此介面時,需一併查證該access_token所屬的appkey是否為自己的客戶端套用appkey。 Appkey來源相符的才允許換取自身服務的認證憑證。
3、 對所有已存入的綁定access_token進行核查,發現access_token中的新浪uid和綁定新浪uid不一致、非自身客戶端應用appkey授權的access_token、過期access_token等異常情況均需要全部撤銷,要求這些異常用戶重新授權登入。
點擊劫持漏洞
惡意站點透過iframe的方式嵌套微博應用網站,利用HTML透明覆層等技術,劫持用戶的點擊操作。從而達到誘導用戶執行惡意加關注目的。
修復建議:
1、不需要被iframe的應用,可選用下面之一的方法。
- a、header頭宣告header( "X-FRAME-OPTIONS:DENY");
- b、JS判斷目前頁面是否被iframe,範例程式碼: if (top.location!=location){top.location=locaiton;}
#2、需要被iframe的產品。
- a、判斷父視窗是否為允許的頁面;
- #b、彈出加上關注確認,並給予被追蹤者的暱稱。
應用程式安全性涉及的範圍比較廣,開發者除了要注意避免掉上面常見的安全問題外,也應該關注最新安全趨勢,了解自身產品的安全缺陷,更重要的提升產品和開發人員的安全意識,只有這樣,才盡可能的減少安全問題產生。如果出現安全漏洞,可以及時聯絡我們,我們會第一時間提供解決方案。