標籤:
app開發的時候,如何保護app的介面呢?
用https是我想到的辦法,但是不知道怎麼實現,所以就考慮用token,雖然不是絕對有效,但是能防止一般的使用者來攻擊,高手非要攻擊,只能警示了吧。
token=“$(參數md5|按一定規則修改的字串|時間戳記|使用者Id)$”=fasdfasdfasdfasdfadfadfasd
伺服器端構建一個token
伺服器端的token還是很重要的,最重要的是裡面有一個時間戳記,當用戶端將serKoken提交過來的時候,可以用時間限制,serToken的有效時間,如果不在時間限制內,或與上次的ip不同,或與上次的裝置資訊不同,那麼就認為,url非法。
token可靠的前提是:
1)app端不被反編譯,攻擊者不知道你的構造clientToken的方法;
2)伺服器端serToken產生複雜,演算法不被猜出,驗證足以嚴格,限制攻擊者不能偽造出伺服器端token,特別短時間失效原則,限制一般攻擊者沒時間猜出token
用戶端構建一個token:
string serToken=GetServerToken(string ip ,string userName,string deviceInfo,string tag);--dedc080af089bccd7fbdf708e3c06898 //擷取一個伺服器端token
string clientParmMd5=Md5("name=test&Value=123"); --a95bc463f71a08ba40e64e52d23b9284 //對參數md5
string clientIp="103.16.127.226"; //用戶端ip
string deviceInfo="xxxxxxxxxx";
string userName="curAppUserName"; //當前app使用者
string startStr="as11as(";
string endstr=")end";
string clientStr=startStr+clientParmMd5+"|"+serToken+"|"+clientIp+"|"+deviceInfo+userName+endStr; //待加密的client字串
string clientToken=GetClientToken(clientStr);
//發起請求
string url=xxxx.com?name=test&Value=123&token=clientToken
伺服器端解析驗證token
//解密用戶端提交過來的token
分解為:"as11as(a95bc463f71a08ba40e64e52d23b9284|dedc080af089bccd7fbdf708e3c06898|103.16.127.226|xxxxxx|userName+endStr"
//解密伺服器token
string serToken="dedc080af089bccd7fbdf708e3c06898";
string [] serTokenArr=DecrySerToken(serToken)
這裡有一個驗證伺服器端token的策略,用來驗證提供的伺服器端token,是否還有效,如果無效直接停止後續判斷操作。
//serToken驗證通過,然後判斷url中的參數是否被篡改,
string nowParMd5=Md5(Request.QueryString["name"]+Request.QueryString["Value"]);
string oleParMd5=clientParmMd5;
//判斷如果被篡改,那麼就返回提示資訊,
注意收集用戶端的資訊,如果有惡意攻擊,那麼證據將會被保留。
如果你的app被反編譯了,而且被攻擊者知道了你構建token的方法,那麼就只能被攻擊了,警示解決吧。
伺服器安裝認證使用https或者ssl,再結合auth認證可以解決,app被別人調用的問題。
這個方案是有效嗎?
如何防止app介面被別人調用