第十一周总结
一、安全架构
XSS攻击(跨站脚本)
攻击方法:
1、通过url参数注入脚本。通过alert探测网站是否防御,然后通过src的方式注入js代码。
2、将攻击脚本保存到数据库。比如评论功能,攻击者评论时提交包含攻击代码的内容。查看该评论的用户都将收到攻击。
防御手段:
消毒:XSS 攻击者一般都是通过在请求中嵌入恶意脚本达到攻击目的,这些脚本是一般用户输入中不使用的,如果进行过滤和消毒处理,即对某些 HTML 危险字符转义,如“>”转义为“>”、“<”转义为“<”等,就可以防止大部分攻击。为了避免对不必要的内容错误转义,如“3<5”中的“<”,需要进行文本匹配后再转义,如“<imgsrc=”这样的上下文中“<”才转义。事实上,消毒几乎是所有网站最必备的 XSS 防攻击手段。
SQL注入攻击
攻击方法:发送含有恶意SQL命令的Http请求。
比如:http://www.a.com?username=xx';drop tables users --
防御手段:
消毒:和防 XSS 攻击一样,请求参数消毒是一种比较简单粗暴又有效的手段。通过正则匹配,过滤请求数据中可能注入的 SQL 文。
SQL 预编译参数绑定:使用预编译手段,绑定参数是最好的防 SQL 注入方法。
CSRF攻击(跨站请求)
攻击步骤:
1)用户访问正常登录网站A,在用户浏览器产生cookie
2)用户访问了攻击者服务器,服务器给用户的响应中包含了对A服务器的请求
3)在用户浏览器使用登录网站A产生的cookie,用攻击服务器返回的请求,非法访问网站A
防御手段:
1、表单 Token: 就是阻止攻击者获得所有请求参数的可能,在页面表单中增加一个随机数 Token,每次请求的 Token 都不相同,请求提交后检查 Token 的值是否正确以确定请求提交者是否合法。
2、验证码:相对说来,验证码则更加简单有效,即请求提交时,需要用户输入验证码,以避免在用户不知情的情况下被攻击者伪造请求。
其他攻击:
1、错误回显,攻击者利用错误提示内容找漏洞,可以通过配置统一错误页面的方式解决。
2、Html注释,程序发布时进行安全扫描。
3、文件上传,设置白名单,只允许上传安全文件。
4、路径遍历,攻击者在请求的 URL 中使用相对路径,遍历系统未开放的目录和文件。防御方法主要是将 JavaScript、CSS 等资源文件独立服务器、独立域名,其他文件不使用静态 URL 访问,动态参数不包含文件路径信息。
主动防御措施:
1、开源 Web 应用防火墙 ModSecurity,探测攻击并保护应用程序。可以嵌入web应用服务器,也可以作为独立应用。
2、对敏感数据加密保存。信息加密技术可分为三类:单项散列加密,对称加密,非对称加密。(单项散列是不可逆的加密,比如MD5,但是可以通过算法将常用密码保存进行破解,安全起见在使用MD5算法时可以拼接用户id等其他信息。对称加密,加密和算法使用相同的秘钥。非对称加密,加密和解密的秘钥不相同)
3、提前进行安全漏洞扫描。
4、机器自动风控的技术手段主要有规则引擎和机器学习。规则引擎是当交易的某些指标满足一定条件的时候,就会被认为具有高风险的欺诈可能性。大型互联网应用更倾向于使用机器学习模型进行风控。
5、布隆过滤器,过滤黑名单。
6、秘钥安全管理与加密服务。密码的生成和查询通过秘钥服务器完成,为了保障密码的安全,将密码分段存储到不同的数据库。
高可用
可用性指标:99.99%,一年中大约53分钟不可用。
故障分类:
事故级故障 严重故障,网站整体不可用
A类故障 网站访问不顺畅,或核心功能不可用
B类故障 非核心功能不可用,或核心功能少数用户不可用
C类故障 以上故障以外的其他故障
故障考核:开发应对自己的代码负责。
高可用架构:
解耦。高内聚、低耦合的组件设计原则。面向对象设计原则、设计模式。领域驱动建模。
隔离。
业务与主系统隔离。微服务与中台架构。生产者消费者隔离。虚拟机与容器隔离。
异步。多线程编程。事件驱动异步架构。(反应式编程,异步通信网络编程)。
备份。集群设计,数据库复制。
失效转移。负载均衡失效转移,数据库实现转移。(一般通过配置服务器进行心跳管理,确认是否失效,进行故障转移)
幂等。
事务补偿。传统事务的ACID,分布式事务的BASE。通过执行业务逻辑逆操作,使事务回滚到事务前状态。
重试。调用者可以通过重试的方式修复单次调用的故障。
熔断。
限流。计数器算法。令牌桶算法。漏桶算法。自适用限流(根据服务器负载动态限流)。
降级。高并发时,将非核心功能下线。
异地多活。
高可用系统运维:
发布。先关闭负载均衡服务器中的部分服务器路由,然后再关闭着部分服务器应用,更新这些服务器。启动服务器,打开路由,循环操作直到所有服务更新完成。
自动化测试。Selenium工具。
自动化部署。
预发布验证。
代码版本控制。分支开发。主干发布。
灰度发布。先发布部分服务器,等运行稳定后再发布其他服务器。
网站运行监控。
服务器性能监控。
监控数据采集。
监控管理。报警、自动失效转移、自动扩容、自动限流。
用户行为日志收集。
服务端收集。缺点是可能会出现信息失真,如 IP 地址是代理服务器地址而不是用户真实 IP;多个链接指向同一个页面的情况下无法分辨访问路径等。
客户端浏览器日志收集,浏览器可以收集用户真实的操作行为,因此比服务器日志收集更加精准。其缺点是比较麻烦,需要在页面嵌入特定的 JS 脚本来完成。
业务运行数据报告。比如缓冲命中率、平均响应延迟时间、每分钟发送邮件数目、待处理的任务总数等。
评论