生成用戶令牌(token)
哈希碼 - MD5/SHA1
UUID - 全局唯一標識符
JWT - Json Web Token - djangorestframework-jwt
防跨站身份僞造 - CSRF / XSRF
防表單重複提交
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))
- 點擊劫持攻擊 - click-hacking - X_FRAME_OPTIONS = 'DENY'
Authentication - 認證 - 能否訪問資源
Authorization - 授權 - 能否對特定的資源進行特定的操作
密碼原文 ---> 加鹽 ---> 生成哈希摘要
SPA - 單頁應用 - Single Page Application
Vue.js / AngularJS
Web應用優化的兩大定律:
- 使用緩存 - 數據量不大 - 熱點數據 - 數據(值)不會頻繁修改
- 能推遲的事情都不馬上做 - 消息隊列 - 削峯 / 上下游節點解耦合
消息隊列使得任務可以異步化的處理
同步 - 阻塞
異步 - 非阻塞
Celery - 既可以充當消息的生產者也可以充當消息的消費者
定時任務 + 異步任務
要使用Celery需要爲其配置隊列服務 - RabbitMQ / Redis
下訂單就是一個可以推遲執行的任務 不需要馬上返回訂單受理的結果 而且下訂單的系統和受理訂單的系統可以是兩套程序(消息的生產者和消息的消費者) 分別運轉在不同的服務器上
項目中可能會遇到執行時間無法預期的任務(比如調用三方平臺)和不需要馬上給出執行結果的任務,這兩種任務都應該放到消息隊列中,受理用戶請求的程序作爲消息的生產者將用戶請求放入消息隊列,稍後由消息的消費者會從消息隊列中取出任務進行處理