生成用户令牌(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
下订单就是一个可以推迟执行的任务 不需要马上返回订单受理的结果 而且下订单的系统和受理订单的系统可以是两套程序(消息的生产者和消息的消费者) 分别运转在不同的服务器上
项目中可能会遇到执行时间无法预期的任务(比如调用三方平台)和不需要马上给出执行结果的任务,这两种任务都应该放到消息队列中,受理用户请求的程序作为消息的生产者将用户请求放入消息队列,稍后由消息的消费者会从消息队列中取出任务进行处理