生成用戶令牌(token)
哈希碼 - MD5/SHA1
UUID - 全局唯一標(biāo)識符
JWT - Json Web Token - djangorestframework-jwt
防跨站身份偽造 - CSRF / XSRF
防表單重復(fù)提交
XSS - 跨站腳本攻擊 - 消毒
hack.js ---> hack.jpg ---> <img src="hack.jpg">
nosniff
<script>
(funciton(){})()
</script>
- SQL注射攻擊
不允許帶單引號拼接SQL語句
"select * from tb_user where username='%s' and password='%s'" % (uid, pwd)
uid = "jackfrued"
pwd = " ' or '1'='1"
select * from tb_user where username='jackfrued' and password=' ' or '1'='1'
cursor.execute('...', (a, b, c))
- 點(diǎn)擊劫持攻擊 - click-hacking - X_FRAME_OPTIONS = 'DENY'
Authentication - 認(rèn)證 - 能否訪問資源
Authorization - 授權(quán) - 能否對特定的資源進(jìn)行特定的操作
密碼原文 ---> 加鹽 ---> 生成哈希摘要
SPA - 單頁應(yīng)用 - Single Page Application
Vue.js / AngularJS
Web應(yīng)用優(yōu)化的兩大定律:
- 使用緩存 - 數(shù)據(jù)量不大 - 熱點(diǎn)數(shù)據(jù) - 數(shù)據(jù)(值)不會頻繁修改
- 能推遲的事情都不馬上做 - 消息隊列 - 削峰 / 上下游節(jié)點(diǎn)解耦合
消息隊列使得任務(wù)可以異步化的處理
同步 - 阻塞
異步 - 非阻塞
Celery - 既可以充當(dāng)消息的生產(chǎn)者也可以充當(dāng)消息的消費(fèi)者
定時任務(wù) + 異步任務(wù)
要使用Celery需要為其配置隊列服務(wù) - RabbitMQ / Redis
下訂單就是一個可以推遲執(zhí)行的任務(wù) 不需要馬上返回訂單受理的結(jié)果 而且下訂單的系統(tǒng)和受理訂單的系統(tǒng)可以是兩套程序(消息的生產(chǎn)者和消息的消費(fèi)者) 分別運(yùn)轉(zhuǎn)在不同的服務(wù)器上
項(xiàng)目中可能會遇到執(zhí)行時間無法預(yù)期的任務(wù)(比如調(diào)用三方平臺)和不需要馬上給出執(zhí)行結(jié)果的任務(wù),這兩種任務(wù)都應(yīng)該放到消息隊列中,受理用戶請求的程序作為消息的生產(chǎn)者將用戶請求放入消息隊列,稍后由消息的消費(fèi)者會從消息隊列中取出任務(wù)進(jìn)行處理