1.背景
最近,团队频繁遭受网络攻击,引起了技术经理的关注。作者对团队安全比较了解,所以花了点时间编辑一下。安全改进自查表。我想很多读者可能需要它,所以我分享一下。
2. 编码安全
2.1 输入验证
| 描述 | 检查元素 |
|---|
| 概述 来自客户端和其他嵌入式代码提交的标头、URL 和 HTTP 参数 所有信息均不是可靠数据。外部边界或应用程序内的任何组件或功能边界都会被检查为潜在的恶意输入。 |
| 黑名单 | 不受信任的数据包含错误的输入字符,例如空字节(%00),换行符(%0d,%0a,r,n),路径字符(../或..)等。 ,建议直接数据阻塞。如果需要接受数据,需要进行各种清洗处理方法 |
| 归一化 | 验证前对不可信数据进行清洗和归一化,比如将目录遍历(./或)等相对路径转换为绝对路径、URL解码等 |
| 清理 | 当不受信任的数据必须接受各种清理程序时,必须完全删除恶意字符,只留下已知的安全字符,或者在处理之前进行正确编码或“转义”,例如数据HTML编码。发布到应用页面时,防止脚本攻击 |
| 合法性检查 | 对不可信数据的合法性检查包括:字符、数字、日期等特征数据类型;数据圈;数据长度等防止位于外部的SQL注入,或者文件大小超过限制,必须拒绝处理与用户身份匹配的内容,避免未经授权的访问 编码场景 | 不可能 当信息数据发送到接口和后端页面时,根据对输出场景进行编码,例如 HTML 实体编码、UR 编码 |
| 清理脚本 | 操作系统命令信息、SQL 和 LDAP 查询。例如银行卡、手机号码、系统信息等。 |
2.3 SQL 注入
| 描述 | 检查要素 |
|---|
| 概述 | 在进入应用 SQL 之前,先进入应用并检查其有效性。 。参数化每个应用程序的处理数据库操作权限,禁用管理员权限的数据库操作,限制操作连接数。 |
| 敏感数据加密 | 敏感信息通过加密、散列或模糊处理进行保密存储,以降低可能存在的漏洞导致数据泄露的风险。 |
| 禁用错误回显 | 禁用系统开机 故障排除 如果出现模式或异常,系统将返回包含机密信息的消息。建议使用自定义错误消息模板。异常信息应保存在日志中,用于安全检查 |
2.4 XSS跨站
| 描述 | 元素检查 |
|---|
| 输入检查 “9%0&+V”等字符 |
| 输出编码 | 输入数据以不同的形式输出到不同的场景。例如,如果输出输出到 HTML 标签,则系统执行 HTML 编码。如果输出为 URL,则执行 URL 编码。脚本编码是在输出到JS的时候完成的。 Stylet 的输出是 CS 编码的。 |
2.5 XML 注入
| 说明 | 元素验证 |
|---|
| 输入验证 | 当数据引用 XML 文档、过滤器和其他 XML 文档内部或外部的特殊字符时,过滤器。禁止加载外部实体并报错 |
| 输出编码 | 建议输出Escape XML元素属性或内容 |
2.6 CSRF横向请求伪造
| 使用说明 | 检查项 |
|---|
| Token 使用 | 在表单中添加会话生成的 Token 字段,用于重要操作一次性使用,提交后在服务器上验证该字段 |
| 二次验证 | 提交表单时需要用户密钥才能执行二次身份验证,如密码、图片验证码、短信验证码等。 |
| 链接验证 | 检查用户请求的Link:字段是否跨域发送 |
3.逻辑安全提交凭证| 用户凭证必须加密并以POST方式提交,建议使用POST方式提交使用HTPS协议加密通道并验证服务器 | | 错误信息 | ,例如“用户名安全识别失败或密码”失败,以防止泄漏更多信息 |
| 异常处理 | 措施必须在登录入口处采取,防止暴力破解或撞库(使用泄露的密码字典进行批量登录尝试)。如果多次验证失败,将自动启用图灵测试。如果多次验证失败,将自动启用图灵测试。如果验证失败,账户锁定机制会自动允许访问限制 |
| 二次验证 | 在进行关键操作(如修改账户密码、更新信息、交易支付等)时,首先启动图灵测试,然后对用户的身份进行两次检查。证书。交易支付过程也必须形成完整的证明链,交易数据必须由发起者进行数字签名 |
| 多重身份验证 | 对于高度敏感或关键业务系统,使用多重身份验证机制推荐使用,例如短信验证码、软件和硬件令牌等。 |
| 验证码的限制 | 前台和后台设置用户获取频率为60秒一次。我们建议每个用户每天接收的短信不超过10条 |
| 安全提示 | 增加安全提示:至少包含操作的功能,验证码发送数量,操作风险个人自负,以及其他信息。 |
| 认证数据验证 | 禁止在响应中返回验证码。服务器同时验证密码、短信验证码等凭证,防止多重认证绕过漏洞。?秒 |
| 使用验证码 | 从用户体验和安全角度推荐,可以设计成用户输入错误一次密码后,自动弹出验证码输入框验证 |
| 验证码验证 | 禁止响应 发回的验证码,验证码的验证必须在服务器端进行 |
3.4 密码管理
| 说明 | 密码设置 ❙ 检查要素 ♹ ,长度必须至少8个字符,包括大小写字母、数字和特殊字符要求。设置用户密码必须通过背景审核,不允许设置不符合复杂度要求的密码。 |
|---|
| 密码存储 | 存储用户密码时,必须使用哈希算法(如SHA1)计算用户密码的哈希值和唯一的随机盐值(Salt)来保存哈希值和Sat值。建议将这两个值分开存储。 |
| 更改密码 | 如果用户更改密码,更改操作需要通过手机号码或电子邮件地址进行身份验证。更改密码时,必须通过短信或电子邮件告知用户该操作是由其本人执行的,并告知其安全风险。对注册的手机号码或电子邮件地址进行二次检查。代码和验证链接必须发送到预先注册的地址,并且必须设置到期日期以防止暴力攻击。安全问题应支持提出尽可能随机的问题。对于多个验证操作,每个验证机制都必须排队,以避免跳过前一个验证机制直接进入最后一个验证步骤的安全风险。应用程序开发中的文本密码,使用数据库管理员帐户操作、其他用户的公共帐户操作,或者将密码输出到日志文件或控制台。 |
3.5 会话安全
| 说明 | 检查要素 |
|---|
| 防止会话劫持 | 在对应用程序进行身份验证时,建议始终使用 HTTPS 协议,并使用 HTTPS 协议。如果连接从HTTP跳转到HTTPS以防止会话劫持,则必须重新生成会话ID。禁止 HTTP 和 HTTPS 之间来回转换,这可能会导致会话劫持 |
| Session ID 安全 | 设置会话 cookie 时,请正确设置“Httponly”属性(不允许程序加 5 个脚本等) ..读取cookies)。信息)“安全”属性(禁用cookie安全设置,以防止cookie通过HTTP连接传递到服务器进行验证); “Domain”属性(授权访问域名,跨域访问时可以指定),“Path”属性(授权访问目录路径)。 ? 服务器端实现完整的会话管理机制,确保所有防CSRF请求都进行合法的认证和授权检查,防止跨站请求伪造(CSRF)漏洞的攻击。 |
| 会话有效性 | 会话过期时间必须根据风险和功能需求的平衡来设置。定期创建新的会话ID并使之前的会话ID失效,可以降低因原始会话ID被盗而导致会话劫持的风险。 |
| 会话注销 | 注销功能适用于所有受身份验证保护的网站。用户退出会话后,应立即删除会话信息并终止相应的会话连接 |
3.6 访问控制
| 使用说明 | 检查项目 |
|---|
| 选择控制模式❙访问控制来自其他应用程序代码的逻辑代码。服务器根据会话ID进行访问控制。 |
| 控制管理 | 仅允许授权用户访问受保护的 URL、文件、服务、应用程序数据、配置、直接对象引用等。进入 |
| 接口管理 | 仅允许外部应用程序或接口访问受保护的本地程序或资源等。 |
| 权限变更 | 变更权限时必须记录日志,并告知用户操作是否为本人操作以及存在的安全风险 |
3.7 文件上传安全
| 说明 | 检查要素 |
|---|
| 身份检查 | 上传文件时,在服务器上检查用户身份,以检查文件的合法性 |
| ,在服务上已验证用户身份,终端检查文件的合法性文件属性并检查文档类型(例如文件后缀名、检查文件头信息等)和大小(检查图像长、宽、像素等)白名单格式。 |
| 存储环境设置 | 保存文件时,保存到与应用环境无关的文档服务器上(配置独立域名),并且保存目录的权限必须设置为不可执行 |
| 隐藏文件路径必须命名,并且禁止将保存的路径信息发送回客户端。 |
| 文件访问设置 | 下载文件时,必须以二进制形式下载。建议不要提供直接访问(防止木马直接执行) |
3.8 接口安全
| 指南 | 检查项目 |
|---|
| 网络限制 | 网络限制 | 如防火墙、主机等Nginx 否认。 |
| 身份认证 | 主叫号码认证,如密钥、秘密、证书等验证技术措施,禁止共享凭证等。提取操作进行数字签名,识别数据篡改 |
| 合法性检查 | 检查调用的参数,如参数是否完整、时间戳和Token是否有效、调用权限是否合法等.. |
| 可用性要求 | 呼叫服务要求,呼叫满足幂等性,即保持数据一致性,限制呼叫的频率和有效期 |
| 异常处理检测到呼叫,呼叫行为在实时,并及时阻止任何异常 |
IV.数据安全
4.1 敏感信息
| 说明 | 检查项目 |
|---|
| 敏感信息传输 | 传输敏感信息时,禁止敏感信息、密码请求、GET 号等用户参数请求等得到。我们建议对所有敏感信息使用 TSL 加密传输。 |
| 在客户端保存 | 当客户端保存敏感信息时,表单上的自动填充功能将被禁用,敏感信息以明文形式保存 |
| 服务器保存 | 当服务器保存敏感信息时、程序上禁止我们对敏感信息进行明文编码,敏感信息如用户密码、身份证号码、银行卡号、持卡人姓名等。临时写入内存或文件的敏感数据必须及时删除和释放 |
| 敏感信息维护 | 维护敏感信息时,禁止将源代码或SQL库上传到开源平台或社区,例如Github、开源中国等 |
| 敏感信息的显示 | 如果显示敏感信息,如果是在网页上显示,敏感字段必须在后端服务器上进行脱敏处理。? 事件类型 | 记录所有认证、访问操作、数据变更、按键操作、管理功能、注销记录等事件。 |
| 事件要求 | 日志通常记录每个事件的时间、发送请求的 IP 地址以及用户帐户(如果经过验证)。 |
| 日志保护 | 日志受到严格保护,防止未经授权的读取或写入访问。 ?命令操作等发生异常时,发生的时间、代码的位置、错误报告的详细信息、可能导致错误的用户等。必须完整记录在日志中。重要系统应有严重异常的预警机制,立即通知系统操作人员排除故障,及时纠正问题。 自定义错误消息 | 在生产环境中,应用程序可能不会在其响应中返回任何系统生成的消息或其他调试信息。配置应用程序服务器以单独处理未处理的应用程序错误。 ,返回自定义错误信息 |
| 隐藏用户信息 | 禁止在系统异常情况下泄露用户个人数据。典型示例:个人身份数据、个人地址、电话号码、银行账号、通讯记录、位置信息等。密钥、系统源代码、应用架构、系统帐号和密码、网络拓扑等)(如果系统出现异常)。 |
| 异常状态恢复 | 当方法发生异常时,必须恢复到之前的对象状态,比如业务操作失败时恢复等。如果对象修改不成功,必须将方法的原始状态恢复到对象,以保持对象状态的一致性 |
5. 主机安全
5.1 I/O 操作
| 说明 | 检查要素 适当的环境 文件访问 |
|---|
| 在多用户系统上创建文件时必须指定权限,以防止未经授权的文件访问。共享目录中文件的读/写/执行权限应使用白名单机制来最小化特权。 |
| 数据访问控制 | 防止未经授权使用嵌入数据对象,设置合理的数据缓存大小以防止权限(读、写、可执行)耗尽系统资源,及时删除临时文件 |
5.2 运行环境
| 描述 | 控制元素 |
|---|
| 最小化开放端口 ♹❀ 无需关闭操作系统端口和服务 |
| 后台服务管理 | 后台(如数据缓存和存储、监控、业务管理、等)仅限于内网访问,公网开放时必须设置认证和访问控制。环境配置名称、密码验证等)放在o等软件包中,防止被篡改。 |
| 关闭调试通道 | 实时代码不包含调试代码或接口 |
| 通信安全 | 配置站点的加密传输或其他 HTTPS 证书 |
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。