我們在開發介面的時候通常會考慮介面的安全性,比如說我們通常會要求請求的url攜帶乙個經過演算法加密的簽名sign
到服務端進行驗證,如果驗證通過,證明請求是合法的。比如以下的url:
醬紫,可能語言難以理解,我畫個圖先:
首先正常的請求系統會要求校驗,當你的合法請求被黑客攔截之後,黑客就會重複地傳送該合法請求,從而達到欺騙系統的目的!這種重複利用合法請求進行攻擊成為重放。
重放攻擊的原理其實很簡單,無非就是系統沒有對合法請求進行唯一性校驗
。什麼意思呢?就是說系統要知道你第一次的合法請求request-1
不能被重複執行,要保證每次請求的唯一性。那麼怎麼去防止重放攻擊呢?
這種方式的做法就是,首先我們認為一次http請求從發出到到達伺服器的時間是不會超過60s的,當你傳送乙個請求時必須攜帶乙個時間戳timestamp
,假設值為10,當請求到達伺服器之後,伺服器會取出當前時間,假設為t2=80,很明顯t2-timestamp>60s
,那麼伺服器就認為請求不合法。
號外號外,這個時間戳是需要加入md5
加密簽名的,不然黑客修改了時間戳t2=20
,那不就是白費功夫了。
為什麼這樣做有效?
缺點:如果黑客在60s內發起攻擊,那麼我們就束手無策了。
上面說到時間戳是有缺點的,那麼我們加入乙個隨機數nonce
,每次成功請求,伺服器會儲存當前成功請求的隨機數nonce
,比如存放在redis
和資料庫中,當請求再次進到伺服器,先驗證時間戳是否有效,如果有效,再判斷攜帶的隨機數nonce
是否在快取或者資料庫中已經存在,如果存在,則認為請求非法。
但你會發現,如果系統請求非常多,這個存放nonce
的快取也好,資料庫也好勢必會越來越大,那麼我們只需要儲存伺服器當前時間60秒內的nonce
值即可。
缺點:你得保證隨機數nonce
絕對唯一
什麼是基於record
的驗證方式呢?就是說我現在不需要隨機數,我利用md5加密的唯一性,採用多維度(多個字段),將每次請求的記錄儲存到資料庫中,每次請求先校驗簽名記錄是否存在,如果存在,則認為請求非法,不存在,則將md5
簽名結合其他引數一起儲存到資料庫中。當然這裡也可以結合時間戳只儲存60s內的資料。
第三點主要是不考慮採用隨機數機制,同時對自己業務可以有不同的擴充套件,或者說加入業務引數方便運維監控等。
綜合上面幾種方案,都有缺點,其中乙個致命的缺點是伺服器的時間和客戶端的時間是存在時間差的,當然你也可以通過校驗時間戳解決此問題。
謝謝閱讀。
web安全防範之XSS漏洞攻擊
原文出處 url 這篇部落格也不錯 url 通常會遇到的攻擊 攻擊方法也很多 原理 向網頁內注入可執行 從而達到入侵目的。危害 破壞頁面結構,導致頁面顯示問題 更嚴重的會盜取當前使用者的cookie,導致你的賬號被盜等 function escape html t n n t n 0 g var s...
web層安全防範
1.銘記乙個基本原則 永遠也不要相信使用者的輸入!2.輸入檢測。是否驗證了它的 是否檢查了字段的長度?為空或者超長是否會產生問題?是否限制了字段的可用字符集?數值型 英文本母 可見字元 中文字元,etc是否含有對程式有特殊含義的字元?是否限制了字段的取值範圍 特別是數值型資料 是否限制了字段的格式?...
web開發安全防範 總結篇
廢話不多說,直接上乾貨,希望能夠對各位讀者有幫助.資料庫篇 1.對類似訪問令牌 電子郵箱位址或賬單詳情進行加密處理,尤其是使用者的身份識別資訊 密碼 2.如果你的資料庫支援低成本加密,請確保開啟這項功能並保護主機磁碟中的資料。與此同時,確保所有的備份檔案都進行了加密儲存。3.按照最小許可權原則給資料...