研发安全攻防总览
一、编码规范和安全工具推荐
1、编码规范
- 简易性原则
- 清晰性原则
- 健壮性原则
- 最小权限原则
- 代码数据分离原则
- 组件重用原则
- 内存安全原则
2、安全工具
- 奇安信
- XRAY
- 盛邦
- Nmap
- Nessus
- OpenVAS
二、安全攻防
1、web漏洞防护
暴力破解密码
- 强密码
- 尝试次数限制
- 强人机验证
- 定期修改
敏感信息明文
- https
- 加密传输
- 加密存储
越权
- 最小化权限
- 验证输入
- 接口控制
短信炸弹
- 限制手机 | ip 访问次数
- 限制手机号发送时间间隔
- 页面验证码
绕过权限
- 严格判断用户数据的用户访问身份
- 重要功能严格校验权限级别
- 认证和操作放在同一客户端请求
- 认证标识和用户强绑定,阅后即焚
2、WEB攻击
跨站脚本攻击(XSS)
攻击者通过在网页中插入恶意脚本代码,当用户浏览该页面时,这些恶意脚本会被执行,从而达到攻击的目的。例如<script>alert('XSS');</script>
防护方式:
- 用户输入的验证和过滤
- 字符采用HTML实体编码
- 双端验证类型、格式、长度
- HTTP响应头中设置X-XSS-Protection,启用浏览器内置防护
- 在Cookie中设置HttpOnly和Secure标志,防止JavaScript脚本获取Cookie信息
- 内容安全策略(CSP)通过设置HTTP头来限制可以加载的资源类型和来源
跨站请求伪造(CSRF)
利用用户在目标网站的已登录状态,通过诱使用户访问恶意页面或点击恶意链接,让目标网站执行攻击者构造的恶意请求,从而达到攻击目的
防护方式:
- 检查HTTP请求头中的Referer字段,确保请求来源与目标网站同域或可信域名
- 基于令牌(CSRF Token)的验证,通过字定义http头或form表单嵌入token隐藏字段
- 设置Cookie的SameSite属性,限制跨站请求中Cookie的发送Strict:仅同站点请求携带Cookie。Lax:允许部分安全跨站请求(如导航链接)
Set-Cookie: sessionID=abc123; SameSite=Lax; Secure
- 双重验证机制:密码+验证码
- 特定场景单独适配token
命令注入
可以执行系统命令的功能点,用户恶意输入系统命令
防护方式:
- 强输入验证
- 最小权限运行
- 避免系统执行命令
SQL注入
攻击者通过将恶意的SQL代码插入到Web应用程序的输入参数中,从而欺骗服务器执行非授权的SQL命令,达到获取敏感数据、篡改数据或控制数据库的目的。例如:通过get请求删除用户数据http:example.com/user/delete?id=1 or 1=1
防护方式:
- 参数化查询:使用预编译语句替代动态拼接SQL语句
- 输入验证:对用户输入进行严格的格式验证,过滤特殊字符
- 最小权限原则:数据库账户仅授予必要的权限,避免高权限账户连接数据库
- 使用Web应用防火墙(WAF) :WAF可以检测并阻止潜在的SQL注入攻击
- 定时审计和更新
文件上传
用户上传可执行文件到服务器,从而实现执行该文件攻击目标服务器的目的。
防护方式:
- 单独设置文件服务器
- 上传目录设置为不可执行
- 判断上传文件类型
服务器端请求伪造(SSRF)
攻击者通过构造恶意请求,利用服务器的功能作为代理向远程或本地服务器发起请求。攻击类型如下: (1)基于协议的SSRF:利用不同协议的特性来实现攻击,例如HTTP、HTTPS、FTP、file等; (2)基于URL参数的SSRF:通过构造特定的URL参数,使服务器发起请求。 (3)基于文件读取的SSRF:利用文件读取功能,读取服务器上的敏感文件。 (4)基于HTTP GET请求的SSRF:通过构造HTTP GET请求,绕过安全限制。
防护方法:
- 输入验证和过滤:对用户输入进行严格验证,确保只允许合法的请求。
- 限制请求端口:仅允许访问特定的端口,如HTTP和HTTPS。
- 黑名单内网IP:阻止对内网IP地址的访问。
- 禁用不必要的协议:禁用如file://、gopher://等不必要的协议。
- 使用白名单策略:只允许访问特定的资源和地址。
- 应用层防火墙和安全插件:使用应用层防火墙和安全插件来检测和阻止恶意请求。
- 禁止网页非法跳转
反序列化漏洞
在反序列化过程中,应用程序没有对传入的数据进行严格的验证和过滤,攻击者可以通过构造恶意的序列化数据来利用这一过程,从而执行任意代码或命令
防护方法:
- 避免接受来自不受信任源的序列化数据
- 进行完整性检查:对传入的序列化数据进行数字签名
- 在创建对象前强制执行类型约束
- 记录反序列化失败信息
- 使用安全的序列化库
- 加强代码审查
JSON劫持
恶意攻击者通过特定的手段,拦截并窃取原本应返回给用户的JSON数据,这些数据通常包含敏感信息或有价值的数据。
防护方法:
- 加密敏感数据
- 使用安全的JSON解析库
- 通过限制http头限制访问
- 设置CORS策略:限制跨域请求,确保只有授权的域名可以访问敏感数据
3、服务器攻击
拒绝服务攻击(DOS或DDOS)
发送大量无效请求或恶意数据包来实现,导致目标系统资源耗尽,从而无法处理合法用户的请求,DDOS表示分布式拒绝服务攻击。
防护方式:
- 使用防火墙
- 流量清洗
- 负载均衡
- CDN加速
- 启用SYN Cookies
- 反向代理
- 限制客户端请求次数
- 设置流量限制
DNS劫持
DNS负责将域名(如www.example.com)转换为机器可读的IP地址(如192.168.1.1)。用户访问网站时,设备向DNS服务器发送解析请求,服务器返回正确IP以实现访问。
劫持机制:攻击者通过控制网络节点(如路由器)、植入恶意软件或利用协议漏洞,篡改DNS响应数据包,使用户被重定向至恶意服务器。
防护方法:
- DNSSEC(DNS安全扩展) :通过数字签名验证DNS记录的真实性,防止缓存投毒和响应伪造
- HTTPS强制与证书验证:网站启用HTTPS,浏览器验证证书合法性,降低中间人攻击风险
- 网络流量监控
- 定期检查域名账号信息和解析状态
- 定期检查网站索引和外部链信息
- 选择正规DNS服务商