成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

HTTP API 設(shè)計(jì)入坑指南(二)

pingan8787 / 1194人閱讀

摘要:而只需要服務(wù)端生成,客戶端保存,每次請(qǐng)求在頭部中使用攜帶,服務(wù)端認(rèn)證解析就可。如果緩存不清理,驗(yàn)證碼就會(huì)一直有效,不安全。

一、授權(quán)

參考文獻(xiàn):https://blog.risingstack.com/...

1. Basic authentication (最簡(jiǎn)單,適用于沒(méi)有第三方的請(qǐng)求接口中)

客戶端發(fā)送authorization,內(nèi)容為 Basic Base64編碼(username:password),用戶名和密碼沒(méi)有加密

缺點(diǎn):每個(gè)請(qǐng)求都要帶用戶名和密碼,不安全

2. Cookies

Session:用戶登錄成功,服務(wù)端返回一個(gè)sessionID,客戶端將其存在cookie中,每次請(qǐng)求都會(huì)帶這個(gè)sessionID

HTTP Only:(config/session.php中設(shè)置)如果是true,JS代碼將無(wú)法讀取cookie信息,拿不到document.cookies。從而防止XSS攻擊,增加了cookie的安全性,但即便如此,也不要將重要信息存入cookie

3. Single Key :雙方約定唯一標(biāo)示 4. Tokens

4.1 JWT:Json Web Token

參考文獻(xiàn):https://www.jianshu.com/p/af8...;
用戶完成登錄之后,每個(gè)請(qǐng)求都會(huì)包含JWT,用來(lái)驗(yàn)證用戶身份和訪問(wèn)權(quán)限

構(gòu)成:

Header頭部包括Token類型和加密算法,并base64加密

Payload負(fù)載 存放有效信息,并base64加密

Signature簽名 包括Header、Payload、Secret秘鑰(Secret保存在服務(wù)端的,服務(wù)端會(huì)根據(jù)這個(gè)密鑰進(jìn)行生成token和驗(yàn)證,所以需要保護(hù)好)

三部分用.連接,生成完整的token

cookie+session通常是保存在內(nèi)存中,而且服務(wù)從單服務(wù)到多服務(wù)會(huì)面臨的session共享問(wèn)題,隨著用戶量的增多,開(kāi)銷就會(huì)越大。而JWT只需要服務(wù)端生成token,客戶端保存token,每次請(qǐng)求在頭部authorization中使用Bearer攜帶token,服務(wù)端認(rèn)證解析就可。

因?yàn)镴WT不使用cookie,所以支持跨域

因?yàn)閖son的通用性,所以支持跨語(yǔ)言

4.2 Self-Tokens

根據(jù)業(yè)務(wù),自己寫(xiě)生成token的邏輯,注意設(shè)定請(qǐng)求次數(shù)和過(guò)期時(shí)間

5. Signatures

API的使用者和提供者擁有同樣的私鑰,才能操作業(yè)務(wù)

算法如下:
對(duì)參數(shù)進(jìn)行字典升序排列,防止順序不同,生成的簽名不同
排序后進(jìn)行字符串連接
app-secret為后綴,進(jìn)行加密,再轉(zhuǎn)大寫(xiě)

案例:

http://wiki.open.qq.com/wiki/...

https://www.cnblogs.com/dcb36...

https://help.aliyun.com/docum...

https://cloud.tencent.com/doc...

https://docs.gdax.com/#creati...

http://dev.netease.im/docs/pr...

6. One-Time Passwords(OTP)一次性密碼

Time-based One-time Password Algorithm 基于時(shí)間
HMAC-based One-time Password Algorithm 基于計(jì)數(shù)器

感覺(jué)QQ安全中心就是這個(gè)原理,更多內(nèi)容參考

https://www.jianshu.com/p/a7b...

http://www.cnblogs.com/voipma...

7. Oauth2

Oauth2相當(dāng)于第三方,在客戶端和服務(wù)端之間多設(shè)置了一層,用戶給客戶端授權(quán),客戶端向第三方認(rèn)證申請(qǐng)token,申請(qǐng)成功后使用token向服務(wù)端申請(qǐng)資源

參考文獻(xiàn):

http://www.ruanyifeng.com/blo...

https://oauth.net/2/

https://helpx.adobe.com/coldf...

二、安全 1. 請(qǐng)求

不信任任何輸入數(shù)據(jù)
校驗(yàn)數(shù)據(jù)格式:len,range,format,type
拒絕無(wú)效、非法內(nèi)容
使用通用校驗(yàn)類庫(kù),不要自己造輪子
拒絕過(guò)大請(qǐng)求數(shù)據(jù)
記錄失敗次數(shù),黑名單
驗(yàn)證碼:清理session
登錄時(shí)訪問(wèn)一個(gè)腳本文件,用來(lái)生成驗(yàn)證碼,將值保存在Session中,提交時(shí)判斷輸入值與session是否一致。如果緩存不清理,驗(yàn)證碼就會(huì)一直有效,不安全。
保存時(shí)可以用session::flash,訪問(wèn)一次之后就會(huì)被刪除,解決清理緩存的問(wèn)題

2. 超范圍讀取數(shù)據(jù) =》邏輯錯(cuò)誤 3. 異常信息 =》敏感信息 4. 頻率

X-RateLimit-Limit
X-RateLimit-Remaining
Retry-After
X-RateLimit-Reset

5. 安全連接(禁止跳過(guò)驗(yàn)證)=》HTTPS

HTTP:最普遍的一種網(wǎng)絡(luò)協(xié)議,以明文方式發(fā)送內(nèi)容,不適合傳輸一些敏感信息

HTTPS:HTTP的安全版,在HTTP基礎(chǔ)上加了SSL協(xié)議,SSL依靠證書(shū)驗(yàn)證服務(wù)器身份,為客戶端和服務(wù)端的通信加密
作用一:建立數(shù)據(jù)傳輸?shù)陌踩ǖ?br>作用二:確認(rèn)網(wǎng)站的真實(shí)性
缺點(diǎn):費(fèi)用高,速度慢,流量成本大

區(qū)別:

HTTPS需要申請(qǐng)證書(shū)、

HTTPS數(shù)據(jù)加密,安全性高、

HTTP端口是80,HTTPS是443

6. 數(shù)據(jù)RSA加密

支付場(chǎng)景 https://docs.open.alipay.com/...

7. XSS

參考文獻(xiàn):http://laravelacademy.org/pos...
注入惡意JS代碼,解決方案是用 htmlentities()轉(zhuǎn)義數(shù)據(jù)

laravel的blade模板引擎已經(jīng)幫我們處理好了

{!!$data !!} 會(huì)原生輸出HTML,適用于圖片、鏈接
{{ $data  }} 會(huì)對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)義,從而避免XSS攻擊。

如果需要更強(qiáng)大的過(guò)濾HTML功能,可以使用HTML Purifier庫(kù)

8. SQL注入

注入惡意SQL語(yǔ)句,不僅能get注入、post注入、還能cookie注入或利用PHP注釋打碎關(guān)鍵詞重組,解決方案如下:

偽靜態(tài):重寫(xiě)URL,隱藏傳遞的參數(shù)

關(guān)鍵詞過(guò)濾:阻止惡意參數(shù)的輸入,過(guò)濾掉敏感關(guān)鍵詞和符號(hào),利用正則過(guò)濾更好

SQL語(yǔ)言預(yù)處理:類似于一種編譯過(guò)的要執(zhí)行的SQL語(yǔ)句模板,它的優(yōu)點(diǎn)是語(yǔ)句多次執(zhí)行,只做一次查詢,減少時(shí)間,少占用資源,效率高

現(xiàn)代PHP框架很多都采用MVC模式,數(shù)據(jù)庫(kù)的操作都依附于Model,底層已經(jīng)做好了預(yù)防SQL注入

9. CORS 跨域資源共享

我寫(xiě)的《HTTP API 設(shè)計(jì)入坑指南 一》里寫(xiě)跨域的時(shí)候提到過(guò)

10. CSRF

參考文獻(xiàn):

https://www.ibm.com/developer...

https://zh.wikipedia.org/wiki...

跨站域請(qǐng)求偽造,通過(guò)請(qǐng)求盜取用戶cookie信息,解決策略如下:

驗(yàn)證HTTP Referer字段:Header里的referer字段用來(lái)記錄請(qǐng)求的來(lái)源地址,黑客通過(guò)自己的網(wǎng)站去請(qǐng)求,地址不合法,拒絕請(qǐng)求。但是有些瀏覽器可以篡改referer值

token驗(yàn)證:既然黑客盜取了cookie信息,那就以參數(shù)形式加入隨機(jī)的token,在服務(wù)器驗(yàn)證token

HTTP Header中自定義屬性驗(yàn)證:和token一樣,只是不放在參數(shù)中,而是Header頭里

記得關(guān)注我呦

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/11380.html

相關(guān)文章

  • HTTP API 設(shè)計(jì)入坑指南

    摘要:而只需要服務(wù)端生成,客戶端保存,每次請(qǐng)求在頭部中使用攜帶,服務(wù)端認(rèn)證解析就可。如果緩存不清理,驗(yàn)證碼就會(huì)一直有效,不安全。 一、授權(quán) 參考文獻(xiàn):https://blog.risingstack.com/... 1. Basic authentication (最簡(jiǎn)單,適用于沒(méi)有第三方的請(qǐng)求接口中) 客戶端發(fā)送authorization,內(nèi)容為 Basic Base64編碼(usern...

    JayChen 評(píng)論0 收藏0
  • HTTP API 設(shè)計(jì)入坑指南(一)

    一、請(qǐng)求方式 1. 請(qǐng)求方式有g(shù)et/post/put/delete/options 2. get和post的區(qū)別: get通常用作獲取數(shù)據(jù),post通常用作提交數(shù)據(jù) get參數(shù)有長(zhǎng)度限制,受限于URL長(zhǎng)度(http協(xié)議對(duì)url長(zhǎng)度不限制,而是服務(wù)器和瀏覽器的配置參數(shù)限制),post無(wú)限制 get冪等,post不冪等(冪等:多次請(qǐng)求,結(jié)果一樣) header里有個(gè)參數(shù)content-length...

    jay_tian 評(píng)論0 收藏0
  • Java入坑指南

    摘要:入坑指南是滴,下面是一個(gè)最低的入坑還應(yīng)該有種設(shè)計(jì)模式應(yīng)該掌握的。堆棧以幀為單位保存線程的狀態(tài),對(duì)堆棧的操作為壓棧和出棧執(zhí)行字節(jié)碼以后,將會(huì)產(chǎn)生程序計(jì)數(shù)器和棧,程序計(jì)數(shù)器存放將要執(zhí)行下一條指令的偏移量。 Java入坑指南是滴,下面是一個(gè)最低的入坑 還應(yīng)該有23種設(shè)計(jì)模式應(yīng)該掌握的。╮(╯▽╰)╭注意,第一個(gè)j是大寫(xiě)。 Java的特點(diǎn)跨平臺(tái),風(fēng)格接近C++最重要的api文檔 https:/...

    Rindia 評(píng)論0 收藏0
  • Browserify簡(jiǎn)易入坑指南

    摘要:簡(jiǎn)要說(shuō)明長(zhǎng)處在于使用模塊規(guī)范,而不是使用的模塊規(guī)范,以及使用的模塊規(guī)范。簡(jiǎn)單使用關(guān)于命令行工具使用,請(qǐng)參照官方文檔。相同模塊重復(fù)依賴模塊重復(fù)依賴很容易理解,模塊實(shí)現(xiàn)時(shí)可能分割為多個(gè)子文件實(shí)現(xiàn),每個(gè)子文件內(nèi)部可能會(huì)引用同一個(gè)模塊,如。 簡(jiǎn)介 browerify: http://browserify.org/index.html browserify可以看做瀏覽器端的又一個(gè)模塊...

    vpants 評(píng)論0 收藏0
  • FIBOS入坑指南——本地開(kāi)發(fā)環(huán)境搭建

    摘要:如果出錯(cuò),需要查看一下本地節(jié)點(diǎn)是否正在運(yùn)行,在瀏覽器輸入后記完至此,本地的開(kāi)發(fā)環(huán)境基本搭建完成,如果你想試試在本地環(huán)境編寫(xiě)部署調(diào)用智能合約,可以參考官方開(kāi)發(fā)文檔,當(dāng)然,后續(xù)有時(shí)間,我也會(huì)把在智能合約開(kāi)發(fā)過(guò)程中踩到的坑寫(xiě)寫(xiě)。 FIBOS是什么? FIBOS 是一個(gè)結(jié)合 FIBJS 以及 EOS 的 JavaScript 的運(yùn)行平臺(tái),它使得 EOS 提供可編程性,并允許使用 JavaSc...

    goji 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<