描述
為了保證第三方應用與API服務器之間通信的安全性,防止Secret Key盜用、數據篡改等惡意攻擊行為,開放平臺API 服務器使用簽名機制,應用在調用開放平臺API,需要計算出一個簽名。
請求發起方式
通過應用客戶端發起的
通過頁面中的JavaScript、Flash內的ActionScript或手機、桌面客戶端程序發起。則簽名是由請求參數和Session Secret(每個用戶的Session Key所對應的密鑰)經過指定的加密算法生成的字符串。
通過第三方應用服務端發起的
簽名是由請求參數和應用的私鑰經過對應加密算法生成的。
簽名的生成
不進行簽名生成
不生成的簽名的情況也是存在,例如web站點開發前後端分離。但是由於基於session的特性,可以支持正常的業務處理,不過要進行一些必要的準備。
登陸驗證採用post方式提交數據構造token令牌,例如md5(uniqid(rand(), TRUE)),可以設置失效時間驗證referer,同源策略規劃Api授權等等帶有簽名密鑰
請求增加key和sign參數,解決身份驗證和防止參數篡改問題 ,私鑰不要外洩。
分配對應的key、secret簽名生成規則請求參數新增時間戳 timestamp ,可以驗證請求是否過期。$secret 作加密使用, 為了保證數據安全,不要在請求參數中體現。升級優化
對於安全相對高點的系統來講,簽名會採用自己指定的複雜規則,header,body都會做相應處理。例如企業報文,電子訂單信息等。
數據加密/編碼算法列表
參考:http://blog.sina.com.cn/s/blog_4f0322c50101ilml.html
1、常用密鑰算法
密鑰算法用來對敏感數據、摘要、簽名等信息進行加密,常用的密鑰算法包括:
DES(Data Encryption Standard):數據加密標準,速度較快,適用於加密大量數據的場合;3DES(Triple DES):是基於DES,對一塊數據用三個不同的密鑰進行三次加密,強度更高;RC2和 RC4:用變長密鑰對大量數據進行加密,比 DES 快;IDEA(International Data Encryption Algorithm)國際數據加密算法,使用 128 位密鑰提供非常強的安全性;RSA:由 RSA 公司發明,是一個支持變長密鑰的公共密鑰算法,需要加密的文件快的長度也是可變的;DSA(Digital Signature Algorithm):數字簽名算法,是一種標準的 DSS(數字簽名標準);AES(Advanced Encryption Standard):高級加密標準,是下一代的加密算法標準,速度快,安全級別高,目前 AES 標準的一個實現是 Rijndael 算法;BLOWFISH,它使用變長的密鑰,長度可達448位,運行速度很快;其它算法,如ElGamal、Deffie-Hellman、新型橢圓曲線算法ECC等。2、單向散列算法
單向散列函數一般用於產生消息摘要,密鑰加密等,常見的有:
MD5(Message Digest Algorithm 5):是RSA數據安全公司開發的一種單向散列算法,MD5被廣泛使用,可以用來把不同長度的數據塊進行暗碼運算成一個128位的數值;SHA(Secure Hash Algorithm)這是一種較新的散列算法,可以對任意長度的數據運算生成一個160位的數值;MAC(Message Authentication Code):消息認證代碼,是一種使用密鑰的單向函數,可以用它們在系統上或用戶之間認證文件或消息。HMAC(用於消息認證的密鑰散列法)就是這種函數的一個例子。CRC(Cyclic Redundancy Check):循環冗餘校驗碼,CRC校驗由於實現簡單,檢錯能力強,被廣泛使用在各種數據校驗應用中。佔用系統資源少,用軟硬件均能實現,是進行數據傳輸差錯檢測地一種很好的手段(CRC 並不是嚴格意義上的散列算法,但它的作用與散列算法大致相同,所以歸於此類)。3、其它數據算法
其它數據算法包括一些常用編碼算法及其與明文(ASCII、Unicode 等)轉換等,如 Base 64、Quoted Printable、EBCDIC 等。