云时代架构--阅读笔记03
安全意識十原則(一)
我是軟件工程的學生,精力主要集中在業務開發中、功能實現中,較少的注意軟件的安全意識,在校的我們所做的項目還比較小型,如果針對工作后,公司項目的業務實現,我們只是簡單做一下掃描和滲透,很少在在代碼和邏輯層面做深入的分析,這樣一旦出錯,會發生比較嚴重的后果,所以安全還是要做好,首先我們必須一點一滴的建立起必要的安全意識。
下面是作者根據自身經驗總結的偏產品技術的安全意識十原則:
整個系統的安全程度取決于木桶最短的那塊板。黑客往往喜歡找邊緣化的子站點或非核心邏輯進行攻破,這些模塊或站點往往是由初級程序員打造,有的甚至還不是主站統一的技術架構,總體上會防備薄弱。黑客能夠攻破任意站點進去到內網,就有種種可能。針對這點,我們需要做的是對于安全的排查,需要全面覆蓋,除非子站在部署上用戶體系上徹底隔離。
2、開發層面:不要信任客戶端的任何東西
對于HTTP協議,不管是頭里面的東西(來源、客戶端類型、Cookie)還是正文里面的東西,任何數據都是可以偽造的。我們往往會覺得Get的東西暴露在瀏覽器地址上,里面的參數不安全,Post過來的數據因為不暴露就安全,然后會信任Cookie中的數據做一些權限控制,會用頭里面的一些數據做一些安全性控制。我們需要從根子里面有這個意識所有客戶端的東西可以用但不能不經過判斷直接相信。例如:登錄后的UserID應該是保存在服務端的,我們根據SessionID在服務端獲得的,我們需要全面排查代碼,不允許在Controller的方法里存在類似于用戶ID這樣的字段。
3、開發層面:數據就是數據代碼就是代碼。
對于客戶端過來的任何信息應該都只是數據,應該很少會讓客戶端來告訴服務端執行的代碼。第一客戶端過來的數據需要讓它當成數據來處理,不管是Encoding一下也好,SQL參數化(Mybatis的$和#問題)也好都是這個方面的措施(從前到后一路數據都以數據的身份在程序中流轉),第二從數據庫里出來的東西也只能是數據不能讓它變為HTML或JS代碼,也需要Encoding一次再在客戶端上呈現。我們應該從根源上去讓數據只可能成為數據。
4、開發層面:用戶看不到不等于黑客看不到
隨著前后端的分離,現在很多請求都是AJAX請求,AJAX請求會有幾方面的安全疏漏:
①邏輯分散而明確。(方法名稱的易理解性)
②容易覺得AJAX請求是前端程序發起的而忽略權限問題
③服務端返回了過多的數據,這是比較危險的事情,因為有一些內部的字段會返回出去。
④服務端返回的數據列對應了數據庫實際的列,相當于暴露了表結構,對于以后各種API的嘗試和注入極端危險。
⑤一些敏感的數據也直接返回給客戶端了,雖然客戶端不會展現出來,但是對于黑客來說根本不在于用戶看得到看不到這些數據。
這就要求我們在做設計的時候盡可能仔細審視AJAX的接口的權限、數據開放性和脫敏等問題。
?
?原文章:?https://mp.weixin.qq.com/s/gd-XqGGh08o-vWFZSR0RJg?tdsourcetag=s_pctim_aiomsg
轉載于:https://www.cnblogs.com/zhao-teng-ass/p/10549821.html
總結
以上是生活随笔為你收集整理的云时代架构--阅读笔记03的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JPEG图片扩展信息读取与改动
- 下一篇: linux下的/dev/shm/ 以及与