1 敏感信息操作
- 数据脱敏,例如:18711112222 -> 187****2222
- 加密存储
- 数据防爬,防枚举;1/3/5分钟内,单一用户访问次数限制;1天内,单一用户访问次数限制;可枚举id加密
2 权限类功能
- 服务端需要对查看、修改等操作的操作权限进行严格校验
- 重要的接口需要防止遍历,防止通过url参数改变查看、操作其他人信息
3 登录配置
- 登录密码、验证码等需要限制尝试次数
- 账号相关接口需要做人机识别处理
- 系统预置账号不能使用弱口令,且初始密码首次登录强制求改
- 登录账号长时间无操作需要自动退出登录
4 安全配置
- 防止中间人等攻击,使用https
- 应用日志需要配置记录登录操作等敏感行为
- 不允许在配置文件、数据库、缓存中明文存放密码、key等,需要加密存储
- 密码禁止明文传输
5 数据库操作
- 编写的SQL必须预编译,不允许通过字符串拼接的方式合成
- 拼接变量必须经过处理,只允许大小写字符和数字_-.字符
防御SQL注入:
- 使用预编译
6 web安全
6.1 HTML页面渲染
- 动态输出JSON必须对其中字符串值做XSS防御
- 禁止向HTML页面输出未过滤或转义的用户数据
防御XSS攻击:
- 过滤和转义
- 内容安全策略(CSP),设置content-security-policy
- 设置正确的content-type
6.2 Form表单提交
- 提交必须执行CSRF过滤,设置token或校验referer
- 使用post方式提交表单
6.3 CORS跨域
Access-Control-Allow-Origin设置白名单,防止跨域
6.4 文件上传
- 禁止将上传文件存储在web等具有可解析功能或执行权限的目录下
- 禁止从服务器本地读取文件传输到外部,防止被任意本地文件读取
- 禁止使用用户指定文件的content-type
- 需要对上传图片进行内容校验,防止恶意文件上传
- 对外部上传文件名根据时间和MD5进行重命名
任意文件读取防御:
- 彻底url解码
- 路径遍历特征检测
6.5 用户输入
-
用户请求传入参数需要做有效性验证:
-
pageSize过大导致内存溢出
-
恶意orderby导致数据库查询慢
-
任意重定向
-
sql注入
-
反序列化注入
-
正则DOS
6.6 cookie读写
- 禁止cookie中明文写入敏感数据
- 设置httpOnly,禁止使用js读取cookie数据
6.7 外链
页面通过超链接方式跳出页面时,必须指定rel=nooopener
6.8 防御SSRF
- 协议白名单
- 防止跳转
- 正确过滤ip
- 正确访问限制