1. 权限测试
安全中的权限问题主要包括未授权访问和越权两大类。
测试点:
- 设计阶段实现接口权限最小化,即一个用户只能访问其应该访问的对象。
- 在进行每一次接口调用时,都需要把API密钥(如果有)、用户token作为校验参数发送到API进行校验
- 后端需要对用户登录状态和身份进行校验,并验证用户对相应API的请求是否合法。
- 如果使用静态API密钥,为防止攻击者通过抓包等方式获得密钥,静态API密钥应使用强加密算法进行加密后传输。
- 为防止重放攻击,建议在参数中包含时间戳,随机数nonce等内容。
- 如果系统内部多台服务器互相通信的接口没有使用API密钥,也可以通过严格的访问控制规范来规避风险
2. 参数校验测试
参数校验问题:
- XSS:未对特殊字符、代码、编码进行过滤;代码与数据区分未分离;JSON数据未进行过滤;未对输入设置合适的全局过滤策略
- SQL注入:未对特殊字符,SQL语句、特殊编码进行过滤,或未对使用参数化查询
- 命令执行:有些API有命令执行功能,但未限制那些命令可执行(需要使用白名单规定可执行的命令)
- 数据溢出:未对参数最大值进行限制,或未对参数的取值范围按照业务逻辑进行限制
- 参数类型篡改:API接收本来应该在后端设置的参数并自动将其转换为内部对象属性
通用测试点:
- 参数的校验逻辑应在前后端全局生效
- 禁止应在后端设置的参数在数据包中发送
- 测试字符串输入的大小和数据类型,同时强制指定合适的范围和格式。
- 测试字符串变量的内容,只接受合理的数据值,过滤掉包含二进制数据、转移序列、注释符号等输入。
- 测试输入是否符合业务逻辑
- 在参数中包含时间戳、随机数nonce等内容,用于防止重放攻击
防SQL注入测试点:
- 使用SQL查询参数化(语句预处理)
- 避免使用字符串拼接来构建SQL查询语句,不要拼接没有经过验证的用户输入
- 通过设置让web应用中用于连接数据库的用户对web目录不具有写的权限
- Web应用中,应对用于连接数据库的用户与数据库系统管理员用户的权限有严格区分(如不能执行drop等),并设置web应用中用于连接数据库的用户不允许操作其他数据库。
防XSS测试:
不可信数据测试点:
- 将不可信数据插入HTML元素内容前进行HTML实体转义
- 将不可信数据插入HTML常规属性前,应进行编码
- 编码HTML内容的JSON值,并由JSON.parse读取数据
- 将不可信数据插入HTML样式属性前,应对CSS进行编码和严格验证
- 将不可信数据插入HTML URL参数前,应进行URL编码
- 避免URL内容被JavaScript执行
- 将不可信数据插入可执行的上下文中,如HTML子文本和文本属性、Event Handler和JavaScript代码、CSS、URL参数时,应进行HTML转义和JavaScript转移、过滤
- 使用安全的JavaScript函数或属性填充DOM
Cookie安全:
测试cookie是否进行了安全性方面的设置。例如secure=true,防止cookie在HTTP会话中以明文传输;httponly=true,防止JS脚本读取cookie信息,防止XSS攻击。
使用框架、库或组件提高安全性:
使用新版本有助于防止基于已知漏洞的XSS工具。
3. 传输安全性测试
通信方式传输安全性测试:
- 系统中应采用密码技术支持的保密性保护机制或其他具有相应安全强度的手段
- 系统中不得使用已被证明为不安全的算法进行用户数据加密
- 身份鉴别信息应使用端对端加密技术进行加密传输
- 和第三方对接、进行敏感信息传输时,应使用加密技术防止敏感信息泄露或被篡改,推荐使用对称加密技术
- 客户端与服务端之间所有经过认证的连接都需要使用不低于TLS1.2安全级别的加密通信方式
数据安全传输安全方面安全性测试:
- Web端使用HTPPS进行数据传输
- 其他通信用使用安全加密协议,如SSH、HTTPS、FTPS
- 限制使用HTTP、FTP、TELNET等风险较高的协议。
- 应采用数据加密技术来保证数据的完整性;重要接口,如付款,认证授权,建议使用数据签名以保证其不可否认性
- 指定恰当的会话国企策略
设计接口安全性测试:
- 通过X.509证书认证升级站点的身份
- 在升级通道中传输数据时应支持加密,防止内容被窃听
- 升级包需要进行签名校验
- 升级站点使用HTTPS等安全通道传输,并且需要通过加密升级包实现
- 需要对升级包进行版本校验,若有问题应提供错误提示
文件传输安全性测试:
- 符合权限测试要求
- 符合通信和数据安全要求
- 使用最新且稳定的中间件、组件、框架库,避免解析漏洞
- 结合MIME Type、二进制字节流、后缀检查等方式进行文件类型检查
- 对于图片的处理可以使用压缩函数或resize函数,处理图片的同时破坏可能存在的恶意代码
- 对后端使用上传文件白名单,对升级包授权文件等的上传点应额外进行文件签名验证
- 对后端上传文件夹进行执行权限控制
- 使用随机数改写文件名和文件路径,从而使得用户不能轻易访问自己上传的文件
4. 拒绝服务攻击安全性测试
测试点:
- 对系统的执行时间、最大分配内存、文件描述符数、进程数、请求有效负载大小、单个客户端/资源请求数量、返回每页记录数进行定义和限制
- 对用户调用API的频率进行明确的时间窗口限制,并设定适当的锁定和解锁时间
- 对服务端提交的字符串进行查询和参数请求时,执行适当的参数验证,尤其是在响应中对返回数量进行验证
- 定义并强制验证所有传入参数和有效负载的最大数据量,如字符串的最大长度和数组中元素的最大数量
- 对socket点对点通信的情况使用IP白名单
版权归原作者 穿月女 所有, 如有侵权,请联系我们删除。