簡易有效Api接口防攻擊策略

API安全

API(Application Programming Interface,應用程序編程接口)是一些預先定義的函數,目的是提供應用程序與開發人員基于某軟件或硬件得以訪問一組例程的能力,而又無需訪問源碼,或理解內部工作機制的細節。

簡單的說,就是通過某一預先定義的渠道讀/寫數據的方式。

那么Api的安全性就變得尤為重要,要明白使用、管理、協調和監控云服務會在安全方面帶來什么影響。安全性差的API會讓整個項目面臨涉及機密性、完整性、可用性和問責性的安全問題。

接口安全要求:

1.防偽裝攻擊(案例:在公共網絡環境中,第三方 有意或惡意 的調用我們的接口)

2.防篡改攻擊(案例:在公共網絡環境中,請求頭/查詢字符串/內容 在傳輸過程被修改)

3.防重放攻擊(案例:在公共網絡環境中,請求被截獲,稍后被重放或多次重放)

4.防數據信息泄漏(案例:截獲用戶登錄請求,截獲到賬號、密碼等)

設計原則:

**1.輕量級
2.適合于異構系統(跨操作系統、多語言簡易實現)
3.易于開發
4.易于測試
5.易于部署
6.滿足接口安全需求(滿足接口安全1,2,3),無過度設計。**

適用范圍:

**1.所有寫操作接口(增、刪、改 操作)
2.非公開的讀接口(如:涉密/敏感/隱私 等信息)**

接口參數簽名 實現思路參考:

必要的接口傳遞參數:

參數名類型必選描述
Key=ValueString接口參數正常使用
signString該次接口調用的簽名值,服務器端防止偽裝請求,防篡改,防重發識別的重要

簽名算法過程:

假設當前與服務器約定的appkey=123456;

1.對除簽名外的所有請求參數按key=value做升序排列
則:有c=3,b=2,a=1 三個參數,另加上appkey后, 按key排序后為:a=1,b=2,c=3;
2. 把參數名和參數值連接成字符串,最后拼接appkey,得到拼裝字符:a=1&b=2&c=3&123456
3.然后進行32位MD5加密,最后將到得MD5加密摘要轉化成大寫。截取密文前18位作為pwd的參數進行傳遞。


工具類:

Map對象排序:

  /*** 方法用途: 對所有傳入參數按照字段名的Unicode碼從小到大排序(字典序),并且生成url參數串** @param paraMap    要排序的Map對象* @param urlEncode  是否需要URLENCODE* @param keyToLower 是否需要將Key轉換為全小寫*                   true:key轉化成小寫,false:不轉化* @return*/public static String formatUrlMap(Map<String, String> paraMap, boolean urlEncode, boolean keyToLower) {String buff = "";Map<String, String> tmpMap = paraMap;try {List<Map.Entry<String, String>> infoIds = new ArrayList<Map.Entry<String, String>>(tmpMap.entrySet());// 對所有傳入參數按照字段名的 ASCII 碼從小到大排序(字典序)Collections.sort(infoIds, new Comparator<Map.Entry<String, String>>() {@Overridepublic int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2) {return (o1.getKey()).toString().compareTo(o2.getKey());}});// 構造URL 鍵值對的格式StringBuilder buf = new StringBuilder();for (Map.Entry<String, String> item : infoIds) {if (!TextUtils.isEmpty(item.getKey())) {String key = item.getKey();String val = item.getValue();if (urlEncode) {val = URLEncoder.encode(val, "utf-8");}if (keyToLower) {buf.append(key.toLowerCase() + "=" + val);} else {buf.append(key + "=" + val);}buf.append("&");}}buff = buf.toString();if (buff.isEmpty() == false) {buff = buff.substring(0, buff.length() - 1);}} catch (Exception e) {return null;}return buff;}

字符串MD5:

 public static String md5(String string) {if (TextUtils.isEmpty(string)) {return "";}MessageDigest md5 = null;try {md5 = MessageDigest.getInstance("MD5");byte[] bytes = md5.digest(string.getBytes());String result = "";for (byte b : bytes) {String temp = Integer.toHexString(b & 0xff);if (temp.length() == 1) {temp = "0" + temp;}result += temp;}return result;} catch (NoSuchAlgorithmException e) {e.printStackTrace();}return "";}

其他常見的加密方式:

DES加密算法:DES加密算法是一種分組密碼,以64位為分組對數據加密,它的密鑰長度是56位,加密解密用同一算法。DES加密算法是對密鑰進行保密,而公開算法,包括加密和解密算法。這樣,只有掌握了和發送方相同密鑰的人才能解讀由DES加密算法加密的密文數據。因此,破譯DES加密算法實際上就是搜索密鑰的編碼。對于56位長度的密鑰來說,如果用窮舉法來進行搜索的話,其運算次數為256。

隨著計算機系統能力的不斷發展,DES的安全性比它剛出現時會弱得多,然而從非關鍵性質的實際出發,仍可以認為它是足夠的。不過,DES現在僅用于舊系統的鑒定,而更多地選擇新的加密標準。

AES加密算法:AES加密算法是密碼學中的高級加密標準,該加密算法采用對稱分組密碼體制,密鑰長度的最少支持為128、192、256,分組長度128位,算法應易于各種硬件和軟件實現。這種加密算法是美國聯邦政府采用的區塊加密標準,這個標準用來替代原先的DES,已經被多方分析且廣為全世界所使用。

AES加密算法被設計為支持128/192/256位(/32=nb)數據塊大小(即分組長度);支持128/192/256位(/32=nk)密碼長度,,在10進制里,對應34×1038、62×1057、1.1×1077個密鑰。

RSA加密算法:RSA加密算法是目前最有影響力的公鑰加密算法,并且被普遍認為是目前最優秀的公鑰方案之一。RSA是第一個能同時用于加密和數宇簽名的算法,它能夠抵抗到目前為止已知的所有密碼攻擊,已被ISO推薦為公鑰數據加密標準。RSA加密算法基于一個十分簡單的數論事實:將兩個大素數相乘十分容易,但那時想要,但那時想要對其乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰。

Base64加密算法:Base64加密算法是網絡上最常見的用于傳輸8bit字節代碼的編碼方式之一,Base64編碼可用于在HTTP環境下傳遞較長的標識信息。例如,在JAVAPERSISTENCE系統HIBEMATE中,采用了Base64來將一個較長的唯一標識符編碼為一個字符串,用作HTTP表單和HTTPGETURL中的參數。在其他應用程序中,也常常需要把二進制數據編碼為適合放在URL(包括隱藏表單域)中的形式。此時,采用Base64編碼不僅比較簡短,同時也具有不可讀性,即所編碼的數據不會被人用肉眼所直接看到。

MD5加密算法:MD5為計算機安全領域廣泛使用的一種散列函數,用以提供消息的完整性保護。對MD5加密算法簡要的敘述可以為:MD5以512位分組來處理輸入的信息,且每一分組又被劃分為16個32位子分組,經過了一系列的處理后,算法的輸出由四個32位分組組成,將這四個32位分組級聯后將生成—個128位散列值。

MD5被廣泛用于各種軟件的密碼認證和鑰匙識別上。MD5用的是哈希函數,它的典型應用是對一段信息產生信息摘要,以防止被篡改。MD5的典型應用是對一段Message產生fingerprin指紋,以防止被“篡改”。如果再有—個第三方的認證機構,用MD5還可以防止文件作者的“抵賴”,這就是所謂的數字簽名應用。MD5還廣泛用于操作系統的登陸認證上,如UNIX、各類BSD系統登錄密碼、數字簽名等諸多方

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/253083.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253083.shtml
英文地址,請注明出處:http://en.pswp.cn/news/253083.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CSS 如何設置垂直居中

1、水平居中我們都知道&#xff0c;可以直接用&#xff1a; margin:0 auto; 2、垂直居中&#xff0c;需要做一點小小的計算&#xff0c;關鍵代碼如下&#xff1a; height: 600px; position: absolute; top: 50%; margin-top:-300px; 如需水平且垂直居中&#xff1a; height: 60…

被稱為海淀媽媽四大神器之一的傾聽者K3 硬件拆解

暑假期間發現很多博主都在推薦傾聽者K3&#xff0c;被海淀媽媽們稱為四大神器之一&#xff0c; 雖然暫沒聽說其他三大神器是什么&#xff0c;作為教育硬件愛好者還是決定先整個回來拆拆看。 在京東上搜到傾聽者K3版本一共有三種顏色&#xff0c;分別是藍色&#xff08;悟空藍&…

有名信號量sem_open和內存信號量sem_init創建信號量的區別

有名信號量sem_open和內存信號量sem_init創建信號量的區別 分類&#xff1a; C/C sem_t *sem sem_open(const char *name, int oflag, .../*mode_t mode,unsinged int value) ;int sem_init(sem_t *sem,int shared, unsigned int value);區別&#xff1a;1.創建有名信號量必須…

KVM虛擬機相關步驟

KVM是Kernel-based Virtual Machine的簡稱&#xff0c;是一個開源的虛擬化模塊&#xff0c;該文檔是基于CentOS 7.4環境操作的 一、操作系統安裝 本文采用的是CentOS 7.4 1、查看系統版本 cat /etc/redhat-release 2、系統更新 Yum makecache &&yum update && …

dds設計信號發生器

高一 150206101 Dds數字信號發生器設計方案 DDS的工作原理框圖如下 在微機內&#xff0c;若插入一塊D/A轉換卡&#xff0c;然后編制一段小程序&#xff0c;如連續進行加一運算到一定值&#xff0c;然后連續進行減一 運算回到原值&#xff0c;在反復運行該程序&#xff0c;則微機…

Maven--資源文件resource的問題

2019獨角獸企業重金招聘Python工程師標準>>> Maven項目的目錄有&#xff1a; src/java/main src/java/resource src/test/main src/test/resource 有的時候在resource目錄下添加文件卻不能加載出來&#xff0c;解決的辦法是從把添加的資源文件添加到properties---&g…

pthread_create()創建線程最大個數

線程應用程序最常見導致創建線程失敗的原因是線程棧大小的設置。創建一個新的線程&#xff0c;默認情況下系統為線程棧預留了2MB的尋址空間。線程棧起始于進程虛擬 內存的高端地址&#xff0c;并向虛擬內存底端地址方向擴展。取決于線程本身的大小以及其它線程內存分配的情況&a…

C++ Primer 5 CH4 表達式

4.1 基礎 函數調用也是一種特殊的運算符&#xff0c;它對運算對象的數量沒有限制。C 的表達式要么是左值&#xff0c;要么是右值。左值可以位于賦值語句的左邊&#xff0c;右值則不可以。當一個對象被用作右值的時候&#xff0c;用的是對象的值&#xff1b;當對象被用作左值的時…

PHY以太網自動協商原理

自協商原理&#xff1a;自協商是通過一種叫做快速連接脈沖&#xff08;Fast Link Pulse&#xff09;的信號實現的&#xff0c;簡稱FLP。自協商的雙方通過FLP來交換數據。 在具備自協商能力的端口沒有Link的情況下&#xff0c;端口一直發送FLP&#xff0c;在FLP中包含著…

canvas--初級

摘要&#xff1a; canvas:默認寬高為300*150&#xff0c;需用canvas的API定義其寬高繪畫路徑以beginPath()開始,以closePath()結束常用方法fill()、stroke()、rect()、arc()、text()、lineTo()、moveTo()以下為代碼&#xff1a; var cdocument.getElementById("mycanvas&q…

撲克牌翻牌問題(遞歸)

撲克牌翻牌問題 題目描述&#xff1a; 有52張牌&#xff0c;使它們全部正面朝上&#xff0c;從第2張開始&#xff0c;凡是2的倍數位置上的牌翻成正面朝下&#xff1b;接著從第3張牌開始&#xff0c;凡是3的倍數位置上的牌&#xff0c;正面朝上的翻成正面朝下,正面朝下的翻成正面…

以太網自動協商原理

自協商基本原理 自動協商模式是端口根據另一端設備的連接速度和雙工模式&#xff0c;自動把它的速度調節到最高的公共水平&#xff0c;即線路兩端能具有的最快速度和雙工模式。 自協商功能允許一個網絡設備能夠將自己所支持的工作模式信息傳達給網絡上的對端&#xff0c;并接受…

Python學習-文件的調用-讀取

1.文件的打開 open(filename[,mode[,buffering]]) #這個一定要記得關文件。close.() filename,要以路徑的形式展示&#xff0c;比如在"c:\"中&#xff0c;則要這樣寫: rc:\filename 如果不用路徑展示&#xff0c;那就用filename.其會在執行文件所在的文件夾進行搜索…

javascript . 05 json的組成、for...in 遍歷對象、簡單數據類型與復雜數據類型的傳值與傳址、內置對象...

對象字面量 JSON var obj { aaa :999};   var json{"aaa":999&#xff0c;“bbb”&#xff1a;888}; ”kay“&#xff1a;value 對象字面2??定義方法和json很像&#xff0c;只有一點不同&#xff0c;json的key 必須加“”   &#xff1b; 對象&#xff0c;數…

nohup命令

nohup命令 起因 ssh到機器上&#xff0c;然后執行某個程序&#xff0c;再登錄發現程序早就不運行了。 原因 ssh過去之后&#xff0c;執行的大部分命令&#xff08;守護進程不會斷開&#xff09;&#xff0c;都是ssh進程的子進程&#xff0c;ssh斷開&#xff0c;命令自然會中斷 …

mac與phy如何實現網絡自適應

這兩天修改網卡驅動以實現10/100/1000M自適應&#xff0c;因此研究了下phy芯片和emac驅動如何兼容10/100/1000M網絡環境&#xff0c;記錄在此。 網絡中設備端數據鏈路層由mac芯片和phy芯片組成&#xff0c;phy芯片根據外部網絡環境完成自動協商以及配置&#xff0c;驅動中根據p…

asp.net(mvc) 框架

1、NFine mvcef 2、Grove orm架構 3、NHibernate orm 4、NBear 5、petshop 6、Membership 7、Brnshop 網上商城 8、cms快速開發&#xff1a;http://www.open-open.com/news/view/a90f1 9、c#開源框架&#xff1a;http://www.cnblogs.com/gaoyuchuanIT/articles/5612268.html 來…

LVM邏輯卷詳解及創建

我們先來看一下這張圖片&#xff1a;PV: 底層的一個硬盤設備&#xff0c;可以是一個分區&#xff0c;也可能是一個RAID。我們可以把這個塊設備創建成一個物理卷格式&#xff0c;即一個PV。VG: 將一個或多個PV提供的存儲空間在一個更低的單位上劃分成一個個獨立的存儲單元&#…

python文件操作總結

python中對文件、文件夾&#xff08;文件操作函數&#xff09;的操作需要涉及到os模塊和shutil模塊。 得到當前工作目錄&#xff0c;即當前Python腳本工作的目錄路徑: os.getcwd() 返回指定目錄下的所有文件和目錄名:os.listdir() 函數用來刪除一個文件:os.remove() 刪除多個目…

Fread 和fwrite的參數不同,返回值不同

函數fwrite 功能C語言函數&#xff0c;向文件寫入一個數據塊 。size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);注意&#xff1a;這個函數以二進制形式對文件進行操作&#xff0c;不局限于文本文件返回值&#xff1a;返回實際寫入的數據塊數目&…