基础知识
TCP/IP HTTP
TCP 是面向连接的通讯协议,简历会话过程如下:
- 请求一个面向连接的通信会话
- 建立会话
- 传输数据
- 传输结束,信道解除连接
三次握手,四次挥手
TODO...
接口安全处理
接口防刷
- 直接拒接访问
- 验证码
- 图像验证码
- 滑块
- 找不同
- 设置接口请求频率百日每分钟 20 次,超过返回频繁操作
- 对单个用户/IP 限制每分钟请求次数
- 对敏感词/广告进行过滤
- 验证码
- 重放攻击
- timestamp + 随机字符串
- 前端请求带时间戳,和服务端对比,相差一分钟算作作弊
- 签名参数 sign 生成的方法
- 第 1 步: 将所有参数(注意是所有参数),除去 sign 本身,以及值是空的参数,按参数名字母升序排序。
- 第 2 步: 然后把排序后的参数按参数 1 值 1 参数 2 值 2…参数 n 值 n(这里的参数和值必须是传输参数的原始值,不能是经过处理的,如不能将"转成”后再拼接)的方式拼接成一个字符串。
- 第 3 步: 把分配给接入方的验证密钥 key 拼接在第 2 步得到的字符串前面。
- 第 4 步: 计算第 3 步字符串的 md5 值(32 位),然后转成大写,得到的字符串作为 sign 的值。
- 签名算法规则
- 时间戳,随机数,口令按照首字母大小写顺序排序
- 然后拼接成字符串
- 进行 sha1 加密
- 再进行 MD5 加密
- 转换成大写。
WEB 安全
SQL 注入
什么是 SQL 注入
通过把 sql 命令插入到 web 表单提交或输入域名或页面请求查询字符串,最终达到欺骗服务器执行恶意的 Sql 命令。
怎么实现 SQL 注入
TODO
预防 SQL 注入
- 永远不要使用超级用户或所有者账号去连接数据库,严格限制账号权限。
- 检查输入的数据是否是所期望的数据格式或类型。
- 使用数据库特定的敏感字符转义函数,把用户提交的非数字数据进行转义
- addslashes(),str_replace(),mysql_real_escape_string()
- 使用 PDO,预处理,绑定参数
- prepare 语句后,绑定参数是和编译过的语句结合,而非 SQL 字符串结合。SQL 注入的原理就是混淆参数和语句
- 生产环境关闭 Debug 模式,避免将错误的 SQL 语句打印输出
XSS 攻击(跨站脚本)在客户端不知情的情况下运行 js 脚本
怎么实现
TODO
避免
- 过滤和转义用户的输入内容:htmlspecialchars()
- 限制参数类型
- 文件上传做大小、类型限制
CSRF(跨站请求伪造) 攻击者知道所有参数、构造合法请求
伪造成其他用户,发起请求:如拼接恶意链接给其他用户点击
怎么实现CSRF
TODO
避免策略
- 关键操作限制 POST
- 合适的使用验证码
- 添加 token:发起请求时添加附加的 token 参数,值随机。服务端做验证
- header refer:外部来源可拒绝请求
TODO
Nginx 编译配置
TODO
PHP编译配置
TODO