隨筆-95  評(píng)論-31  文章-10  trackbacks-0
          只列舉一種安全性較高的思路且走HTTP

          1: 客戶端登錄,服務(wù)端返回api-key和securekey。 ----> api-key一般與用戶id關(guān)聯(lián)唯一性,同時(shí)自定義生成securekey放入緩存中且返回給客戶端(客戶端需保存)
          2: 客戶端發(fā)起請求,參數(shù)包括:
                1) api-key
                2) 請求參數(shù)
                3) 時(shí)間戳, 這個(gè)參數(shù)的目的是防止請求被人攔截模擬再次發(fā)送,也即過濾使用相同的連接和參數(shù)進(jìn)行重復(fù)請求
                4) 請求參數(shù)的sign簽名(就是把參數(shù)和參數(shù)值,結(jié)合securekey、時(shí)間戳進(jìn)行加密且返回全大寫的字符串,實(shí)際傳輸中并不傳遞securekey)  -->加密方式需和服務(wù)端協(xié)商保持一致

                示例: GET請求鏈接:   http://192.168.1.22:8080/v1/info/list?apiKey=api-key&id=2&name=xx&sign=EFSDKJXNDSF&timestamp=15909090213989

           3:服務(wù)端接收后:
                1) 根據(jù)api-key獲取securekey取得參數(shù);這里可判斷securekey的失效時(shí)間,若失效,直接攔截請求提示用戶重新登錄。
                2) 根據(jù)時(shí)間戳與當(dāng)前服務(wù)端時(shí)間比較,可自定義判斷,比如大于2分鐘就判斷是惡意重復(fù)請求,直接攔截不進(jìn)入業(yè)務(wù)處理,若在2分鐘內(nèi),表示可以重復(fù)發(fā)起相同的請求。
                3) 按照客戶端的請求參數(shù)結(jié)合securekey、時(shí)間戳進(jìn)行加密(方式與客戶端一致) 。
                4) 然后與sign簽名進(jìn)行比較,如果一致,表示是安全的用戶請求,如果不一致,表示被攔截那么禁止進(jìn)入業(yè)務(wù)。

          時(shí)間戳的再次說明:時(shí)間戳的目的就是如果被人惡意攔截模擬重復(fù)發(fā)起請求,比如上面的完整GET請求鏈接,這里被攔截后只能進(jìn)行惡意的重復(fù)請求。因?yàn)槿粜薷膮?shù)在發(fā)送,那么服務(wù)端根據(jù)參數(shù)加密生成的簽名肯定與客戶端簽名不一致,是無法通過認(rèn)證的,只能利用原有參數(shù)重復(fù)發(fā)送,那么時(shí)間戳就能保護(hù)系統(tǒng)不被惡意大量的重復(fù)攻擊。服務(wù)端獲取時(shí)間戳可加入判斷規(guī)則,與當(dāng)前系統(tǒng)時(shí)間比較,若大于多少分鐘,就判定為重復(fù)請求,進(jìn)行攔截,若小于多少分鐘,那么仍然可以請求。


          完!


          posted on 2018-01-19 16:04 朔望魔刃 閱讀(438) 評(píng)論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 长春市| 潞西市| 依安县| 南乐县| 教育| 孝感市| 航空| 清苑县| 和林格尔县| 开江县| 广西| 广德县| 京山县| 桑植县| 汉阴县| 灵山县| 保靖县| 天长市| 大同市| 江都市| 大埔区| 宾阳县| 绩溪县| 黄大仙区| 灵川县| 商河县| 拉萨市| 囊谦县| 即墨市| 渭南市| 邯郸县| 南丹县| 海淀区| 温州市| 和平县| 武隆县| 玛多县| 景洪市| 志丹县| 马公市| 饶河县|