一, 背景
最近开发公司的 web 项目, 商密技术研究部领导推出了一套测试规范, 规范中包括 Web 端安全测试扫描, 扫描结果不尽如人意, 因此搜集及整理如下 Web 安全开发事项.
二, 编码安全策略
简述: 不要相信任何来自客户端提交的数据, 比如 URL 和参数, HTTP 头部, JavaScript 或者其他嵌入代码提交的数据. 对客户端提交的数据需要经过过滤或者转义, 然后再进行处理.
1, 客户端提交数据验证
a, 合法性校验
不可信数据的合法性校验包括: 数据类型校验如字符. 数字, 日期等特征; 数据范围; 数据长度等.
b, 防范 sql 注入
不可信数据进入后端数据库操作前, 使用正确的参数化查询来处理, 避免出现 SQL 注入.
c, 文件校验
不可信数据为解压缩的文件时, 如果文件位于服务目录外或文件大小超过限制, 应拒绝处理.
d, 访问控制
不可信数据通过校验后, 还应确认所提交的内容是否与用户的身份匹配, 避免越权访问.
2, 防止 XSS 跨站
a, 输入校验
对输入的数据进行过滤和转义, 包含但不限于 <>"9%0&+V" 等危险特殊字符.
b, 输出编码
输入数据输出到不同场景中进行不同形式的编码, 如输出到 html 标签中则进行 HTML 编码输出到 URL 中则进行 URL 编码, 输出到 JS 中则行 Script 编码, 输出到 Stylet 中则进行 CSS 编码.
3, 防止 CSRF 跨站伪造
a,Token 使用
在重要操作的表单中增加会话生成的 Token 字段, 提交后在服务端校验该字段.
b, 增加二次验证
在关键表单提交时, 要求用户进行二次身份验证如密码, 图片验证码, 短信验证码等.
c,Referer 验证
检验用户请求中 Referer: 字段是否存在跨域提交的情况.
4, 会话安全
a, 防止会话劫持
在应用程序进行身份验证时, 建议持续使用 HTTPS 连接, 认证站点使用 HTTPS 协议. 如果连接是从防止会话劫持 HTTP 跳转到 HTTPS, 需要重新生成会话标识符. 禁止在 HTTP 和 HTTPS 之间来回转换, 这可能会导致会话被劫持.
b, 会话标识符安全
设置会话 Cookie 时, 正确设置 "Httponly'属性 (禁止程序加 5 脚本等读取 Cookie 信息)"Secure'属性 (禁 Cookie 安全设置止 Cookie 通过 HTTP 连接传递到服务器端进行验证);"Domain" 属性 (跨域访问时可指定的授权访问域名),"Path" 属性 (授权可访问的目录路径).
c,Cookie 安全设置
会话标识符应放置在 HTP 或 HTPS 协议的头信息安全中, 禁止以 GET 参数进行传递, 在错误信息和日志中记录会话标识符.
d, 会话有效期
会话应在平衡风险和功能需求的基础上设置有效期. 定期生成一个新的会话标识符并使上一个会话会话有效期标识符失效, 这可以缓解那些因原会活标识符被盗而产生的会话劫持风险.
e, 会话注销
注销功能应用于所有受身份验证保护的网页, 用户会话注销登出后应立即清理会话相关信息, 终止相关的会话连接.
5, 数据安全
a, 敏感信息传输
敏感信息传输时, 禁止在 GET 请求参数中包含敏感信息, 如用户名, 密码, 卡号等. 建议为所有敏感信息采用 TSL 加密传输.
b, 客户端存储
客户端保存敏感信息时, 禁止其表单中的自动填充功能, 以明文形式保存敏感信息
c, 服务端存储
服务端保存敏感信息时, 禁止在程序中硬编码敏感信息, 明文存储用户密码, 身份证号, 银行卡号, 持卡人姓名等敏感信息, 临时写入内存或文件中的敏感数据, 应及时清除和释放
6, 日志规范
a, 日志记录
确保日志记录包含了重要的应用事件, 但禁止保存敏感信息, 如会话标识, 账户密码, 证件等.
b, 日志保护
日志受到严格保护, 避免未授权的读取或写入访问.
c, 日志记录事件
记录所有的身份验证, 访问操作, 数据变更, 关键操作, 管理功能, 登出记录等事件
7, 异常处理
a, 容错机制
在应用实现时应包含完整的功能异常捕获机制如 try-catch 块, 典型位置: 文件, 网络, 数据库, 命令操作等. 一旦出现异常, 应该在日志中完整记录异常的发生时间, 代码位置, 报错详情, 触发错误的可能用户等, 重要系统的严重异常应该有报警的机制, 及时通知系统运营者及时排查并修复题.
b, 隐藏用户信息
禁止在系统异常时泄露用户的隐私信息, 典型的有: 身份信息, 个人住址, 电话号码, 银行账号, 通讯记录, 定位信息等.
c, 异常状态恢复
方法发生异常时要恢复到之前的对象状态, 如业务操作失败时的回滚操作等, 对象修改失败时要恢复对象原来的状态, 维持对象状态的一致性.
8, 主机安全
a, 数据访问检查
防止封装好的数据对象被未授权使用, 设置合理的据缓存区大小以防止耗尽系统资源.
b, 最小化开放端口
关闭操作系统不需要的端口和服务.
c, 通信安全
配置网站的 HTTPS 证书或其它加密传输措施.
CSRF 跨站请求伪造
来源: http://www.bubuko.com/infodetail-2866661.html