最近公司有專案需要用到簡訊傳送通知的功能,於是花了一些時間調研了幾家簡訊平台.現在的簡訊平台所使用的簡訊傳送協議,基本都是restful格式,已經簡單到不能再簡單的程度,這樣做的好處一是可以跨語言,二是接入代價極小.乙個位址而已,放入瀏覽器就可以直接傳送簡訊,也為測試簡訊傳送效果提供了便利.
下面就是乙個例子:
簡訊內容
可惜的是,這種便利也帶來了不小的安全隱患.即使密碼是已經加密的密碼,也只能保證密碼不被其他人破解而已,無法抵禦重放攻擊.或者,可以直接修改簡訊號碼和簡訊內容,寫入自己的業務,為自己謀取利益;更有甚者,可以把內容修改為營銷類資訊,結合現在國家打擊營銷簡訊的政策,對客戶實施惡意攻擊.
針對重放攻擊,各家平台其實都提供了一些方法來防範,大部分都是提供了ip白名單的功能.這種方式的確可以保證簡訊的**,可惜的是,針對某些客戶,提供固定的ip位址也有一定代價,尤其是在現在ipv4已經枯竭的情況下.
其實,簡單的認證客戶端的方式已經有人提供出來了,實現代價也很小.就是使用hmac簽名的方式.
hmac是基於共享金鑰的雜湊,其演算法提供類似如下功能:
md5(共享金鑰,sim+content) , 當然,使用md5還是sha1或者其他雜湊演算法都是可以指定的.
更改後的格式變為了:
簡訊內容&sign=*********
共享金鑰可以使用https的方式提供給客戶,或者直接溝通獲取.就簡訊傳送而言,需要加密的內容包括簡訊號碼,簡訊內容,加密的內容不能再被更改,否者簽名字串就無法匹配.這樣一來,就可以有效防止善意的攻擊,即修改簡訊號碼或者內容為己所用的情況,但是依然無法防止重放攻擊.要阻止重放攻擊,或許可以在otp演算法中找到解決方案.
otp演算法,即一次性密碼,該演算法之前經常被銀行用來作為驗證使用者.有些朋友或許記得,某些銀行會給使用者乙個密碼生成器,每按一次就可以生成乙個6位的數字密碼,使用者轉賬或者進行某些重要操作時需要提供該數字密碼.這就是由otp演算法來實現的.這種演算法的基礎即為hmac演算法,該演算法提供如下的類似效果:
md5(共享金鑰,時間值)
其中的共享金鑰已經儲存在了硬體中,同時也有乙份在銀行伺服器中,只要雙方時間值一致,因為使用了相同的演算法,就能得到相同的數字密碼,從而驗證了使用者的身份.這種即為基於時間的一次性密碼,即totp.當然,totp演算法中的時間值也可以是其他值,只要雙方協商好,使用同乙個值,就可以得出相同密碼,比方說,驗證過的次數,簡訊傳送的條數等.這種演算法即htop.
如果簡訊傳送客戶端和簡訊平台可以同時獲取一樣的傳送簡訊的次數,那麼就可以拒絕已經使用過的簡訊次數,從而避免重放攻擊.修改後的格式如下:
簡訊內容&count=***&sign=*********
此時的sign應該是md5(共享金鑰,sim+content+count)
只要能保證count的遞增性,就可以拒絕重放攻擊了.
go語言接入阿里雲簡訊平台
按照官方的手冊操作 使用glide安裝go sdk 推薦 執行以下命令,安裝阿里雲go sdk 在安裝完成後,您可以使用openapi explorer來生成相關api的demo並應用在您的專案中。或使用govendor安裝 執行以下命令,安裝阿里雲go sdk 在安裝完成後,您可以使用openap...
ThinkPHP5 0接入阿里大魚簡訊平台
一 在阿里雲控制台開通簡訊服務,新增模板和簽名並審核通過獲取模板id和簽名,還要建立accesskeyid和accesskeysecret,具體流程不做介紹。三 解壓sdk包放在extend 下,示例如圖。四 配置config檔案 alisms signname 申請的簽名 templatecode...
騰訊開放平台的應用接入
2 合作優勢。number1 數億的活躍使用者,利用強大的傳播平台,您的產品能最快速度送達使用者。3 合作方式。以開放,公平的原則,對於優秀的第三方應用的優秀產品,我們將進一步洽談。建立應用過程。第一 建立並開發應用。第三 雙方洽談簽訂協議。第三方提供 優秀社群應用 優秀的運營團隊持續運營 您只需要...