基础知识

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