高安全系统架构

从互联网诞生起,安全威胁就一直伴随着网站的发展,各种 Web攻击和信息泄露也从未停止。2011年中国互联网领域爆出两桩比较大的安全事故,一桩是新浪微博遭XSS攻击,另一桩是以CSDN为代表的多个网站泄露用户密码和个人信息。特别是后者因为影响人群广泛,部分受影响网站涉及用户实体资产和交易安全,一时成为舆论焦点。

让我们先回顾一下这两起事故。

2011年6月28日,许多微博用户发现自己“中毒”,自动关注了一个叫hellosamy的用户,并发布含有病毒的微博,粉丝点击后微博再度扩散,短时间内大量用户中招数小时后新浪微博修复漏洞。

2011年12月,网上有人发布消息称CSDN网站600万用户资料和密码被泄露,很快该消息得到CSDN官方承认,紧接着,天涯社区、人人网等多个重要网站被报告泄露用户数据。

网站应用攻击与防御

XSS攻击:

XSS攻击即跨站点脚本攻击(Cross Site Script ),指黑客通过篡改网页,注入恶意HTML脚本,在用户浏览网页时,控制用户浏览器进行恶意操作的一种攻击方式。

常见的XSS 攻击类型有两种,一种是反射型,攻击者诱使用户点击一个嵌入恶意脚本的链接,达到攻击的目的。上文提到的新浪微博攻击就是一种反射型XSS 攻击。攻击者发布的微博中有一个含有恶意脚本的URL(在实际应用中,该脚本在攻击者自己的服务器www.2kt.cn,URL 中包含脚本的链接),用户点击该URL,脚本会自动关注攻击者的新浪微博ID,发布含有恶意脚本URL的微博,攻击就被扩散了。这次攻击还只是一次恶作剧而已,现实中,攻击者可以采用XSS攻击,偷取用户Cookie、密码等重要数据,进而伪造交易、盗窃用户财产、窃取情报。

另外一种XSS攻击是持久型XSS攻击,黑客提交含有恶意脚本的请求,保存在被攻击的Web站点的数据库中,用户浏览网页时,恶意脚本被包含在正常页面中,达到攻击的目的。此种攻击经常使用在论坛,博客等Web应用中。

xSS 攻击相对而言是一种“古老”的攻击手段,却又历久弥新,不断变化出新的攻击花样,许多以前认为不可能用来攻击的漏洞也逐渐被攻击者利用。因此 XSS防攻击也是非常复杂的。主要手段有如下两种。

消毒:XSS攻击者一般都是通过在请求中嵌入恶意脚本达到攻击的目的,这些脚本是一般用户输入中不使用的,如果进行过滤和消毒处理,即对某些html危险字符转义,如“>"转义为“&gt”、“<”转义为“&lt”等,就可以防止大部分攻击。为了避免对不必要的内容错误转义,如“3<5”中的“<”需要进行文本匹配后再转义,如“<img src=”这样的上下文中的“<”才转义。事实上,消毒几乎是所有网站最必备的XSS 防攻击手段

HttpOnly:最早由微软提出,即浏览器禁止页面JavaScript访问带有HttpOnly 属性的Cookie。HttpOnly并不是直接对抗XSS攻击的,而是防止XSS攻击者窃取Cookie。对于存放敏感信息的Cookie,如用户认证信息等,可通过对该Cookie添加 HttpOnly属性,避免被攻击脚本窃取。

注入攻击

注入攻击主要有两种形式,SQL注入攻击和OS注入攻击。SQL注入攻击的原理。攻击者在HTTP请求中注入恶意SQL命令( drop table users;),服务器用请求参数构造数据库SQL命令时,恶意SQL被一起构造,并在数据库中执行。

SQL注入攻击需要攻击者对数据库结构有所了解才能进行,攻击者获取数据库表结构信息的手段有如下几种。

开源:如果网站采用开源软件搭建,如用Discuz!搭建论坛网站,那么网站数据库结构就是公开的,攻击者可以直接获得。

错误回显:如果网站开启错误回显,即服务器内部500 错误会显示到浏览器上。攻击者通过故意构造非法参数,使服务端异常信息输出到浏览器端,为攻击猜测数据库表结构提供了便利。

盲注:网站关闭错误回显,攻击者根据页面变化情况判断SQL语句的执行情况,据此猜测数据库表结构,此种方式攻击难度较大。防御SQL注入攻击首先要避免被攻击者猜测到表名等数据库表结构信息,此外还可以采用如下方式。

消毒:和防XSS攻击一样,请求参数消毒是一种比较简单粗暴又有效的手段。通过正则匹配,过滤请求数据中可能注入的SQL,如“drop table”、“\b(?:updatelb.*?.bsetldeletelb\W*?\bfrom))b”等。

参数绑定:使用预编译手段,绑定参数是最好的防SQL注入方法。目前许多数据访问层框架,如IBatis, Hibernate等,都实现SQL 预编译和参数绑定,攻击者的恶意SQL会被当做SQL,的参数,而不是SQL命令被执行。除了SQL注入,攻击者还根据具体应用,注入OS命令、编程语言代码等,利用程序漏洞,达到攻击目的。

CSRF攻击:

CSRF ( Cross Site Request Forgery,跨站点请求伪造),攻击者通过跨站请求,以合法用户的身份进行非法操作,如转账交易、发表评论等,如图8.4所示。CSRF 的主要手法是利用跨站请求,在用户不知情的情况下,以用户的身份伪造请求。其核心是利用了浏览器Cookie或服务器Session策略,盗取用户身份。

相应地,CSRF的防御手段主要是识别请求者身份。主要有下面几种方法。

表单Token:CSRF是一个伪造用户请求的操作,所以需要构造用户请求的所有参数才可以。表单Token通过在请求参数中增加随机数的办法来阻止攻击者获得所有请求参数:在页面表单中增加一个随机数作为Token,每次响应页面的Token都不相同,从正常页面提交的请求会包含该Token值,而伪造的请求无法获得该值,服务器检查请求参数中Token的值是否存在并且正确以确定请求提交者是否合法。

验证码:相对说来,验证码则更加简单有效,即请求提交时,需要用户输入验证码,以避免在用户不知情的情况下被攻击者伪造请求。但是输入验证码是一个糟糕的用户体验,所以请在必要时使用,如支付交易等关键页面。

Referer check:HTTP请求头的Referer域中记录着请求来源,可通过检查请求来源,验证其是否合法。很多网站使用这个功能实现图片防盗链(如果图片访问的页面来源不是来自自己网站的网页就拒绝)

其他攻击和漏洞

Error Code:也称作错误回显,许多 Web 服务器默认是打开异常信息输出的,即服务器端未处理的异常堆栈信息会直接输出到客户端浏览器,这种方式虽然对程序调试和错误报告有好处,但同时也给黑客造成可乘之机。通过故意制造非法输入,使系统运行时出错获得异常信息,从而寻找系统漏洞进行攻击。防御手段也很简单,通过配置Web服务器参数,跳转 500页面(HTTP响应码500表示服务器内部错误)到专门的错误页面即可web应用常用的MVC框架也有这个功能。

HTML注释:为调试程序方便或其他不恰当的原因,有时程序开发人员会在 PHP、JSP等服务器页面程序中使用HTML注释语法进行程序注释,这些HTML注释就会显示在客户端浏览器,给黑客造成攻击便利。程序最终发布前需要进行代码review或自动扫描,避免HTML注释漏洞。

文件上传:一般网站都会有文件上传功能,设置头像、分享视频、上传附件等。如果上传的是可执行的程序,并通过该程序获得服务器端命令执行能力,那么攻击者几乎可以在服务器上为所欲为,并以此为跳板攻击集群环境的其他机器。最有效的防御手段是设置上传文件白名单,只允许上传可靠的文件类型。此外还可以修改文件名、使用专门的存储等手段,保护服务器免受上传文件攻击。

Web应用防火墙

网站面临的安全问题复杂多样,各种攻击手段日新月异,新型漏洞不断被报告。如果有一款产品能够统一拦截请求,过滤恶意参数,自动消毒、添加Token,并且能够根据最新攻击和漏洞情报,不断升级对策,处理掉大多数令人头痛的网站攻击,就是一件很美妙的事了。

ModSecurity 采用处理逻辑与攻击规则集合分离的架构模式。处理逻辑(执行引擎)负责请求和响应的拦截过滤,规则加载执行等功能。而攻击规则集合则负责描述对具体攻击的规则定义、模式识别、防御策略等功能(可以通过文本方式进行描述)。处理逻辑比较稳定,规则集合需要不断针对漏洞进行升级,这是一种可扩展的架构设计。

信息加密技术及密钥安全管理

通常,为了保护网站的敏感数据,应用需要对这些信息进行加密处理,信息加密技术可分为三类:单项散列加密、对称加密和非对称加密

单向散列加密:常用的单向散列算法有MD5、SHA等

是指通过对不同输入长度的信息进行散列计算,得到固定长度的输出,这个散列计算过程是单向的,即不能对固定长度的输出进行计算从而获得输入信息.

利用单向散列加密的这个特性,可以进行密码加密保存,即用户注册时输入的密码不直接保存到数据库,而是对密码进行单向散列加密,将密文存入数据库,用户登录时,进行密码验证,同样计算得到输入密码的密文,并和数据库中的密文比较,如果一致,则密码验证成功。

虽然不能通过算法将单向散列密文反算得到明文,但是由于人们设置密码具有一定的模式,因此通过彩虹表(人们常用密码和对应的密文关系表)等手段可以进行猜测式破解。为了加强单向散列计算的安全性,还会给散列算法加点盐( salt ),salt相当于加密的密钥,增加破解的难度。常用的单向散列算法有MD5、SHA等。单向散列算法还有一个特点就是输入的任何微小变化都会导致输出的完全不同,这个特性有时也会被用来生成信息摘要、计算具有高离散程度的随机数等用途。

对称加密:常用的对称加密算法有DES 算发、RC 算法等

所谓对称加密是指加密和解密使用的密钥是同一个密钥(或者可以互相推算)。对称加密通常用在信息需要安全交换或存储的场合,如Cookie加密、通信加密等。

对称加密的优点是算法简单,加解密效率高,系统开销小,适合对大量数据加密。缺点是加解密使用同一个密钥,远程通信的情况下如何安全的交换密钥是个难题,如果密钥丢失,那么所有的加密信息也就没有秘密可言了。对称加密是一种传统加密手段,也是最常用的加密手段,适用于绝大多数需要加密的场合。

非对称加密:常用算法有RSA算法等。

不同于对称加密,非对称加密和解密使用的密钥不是同一密钥,其中一个对外界公开,被称作公钥,另一个只有所有者知道,被称作私钥。用公钥加密的信息必须用私钥才能解开,反之,用私钥加密的信息只有用公钥才能解开。理论上说,不可能通过公钥计算获得私钥。

非对称加密技术通常用在信息安全传输,数字签名等场合。HTTPS传输中浏览器使用的数字证书实质上是经过权威机构认证的非对称加密的公钥。

信息过滤与反垃圾

我国的信息过滤技术是走在世界前列的,尽管如此,在各种社区网站和个人邮箱中,广告和垃圾信息仍然屡见不鲜、泛滥成灾。

文本匹配:机器学习算法

分类算法:机器学习算法

利用机器学习算法做一些检测和监控与预测的算法俩识别垃圾信息。

电子商务风险控制

电子商务网站在给人们带来购物交易的极大便利的同时,也将风险带给了对网络安全一无所知的人们。由于买卖双方的信息不对等,交易本来就存在风险,而当交易在网上发生时,买卖双方彼此一无所知,交易风险也就更加难以控制。如果一个电商网站骗子横行,诚信的交易者屡屡被骗,那么网站就到了最危险的时候,可以说,交易安全是电子商务网站的底线。

风险

电子商务具有多种形式,B2B、B2C、C2C每种交易的场景都不相同,风险也各有特点,大致可分为以下几种。
账户风险:包括账户被黑客盗用,恶意注册账号等几种情形。
买家风险:买家恶意下单占用库存进行不正当竞争;黄牛利用促销抢购低价商品;此外还有良品拒收,欺诈退款及常见于B2B交易的虚假询盘等。
卖家风险:不良卖家进行恶意欺诈的行为,例如货不对板,虚假发货,炒作信用等,此外还有出售违禁商品、侵权产品等。
交易风险:信用卡盗刷,支付欺诈,洗钱套现等。

利用机器学习算法做一些检测和监控与预测的算法俩识别监控,实现实时风控能力。

风控

大型电商网站都配备有专门的风控团队进行风险控制,风控的手段也包括自动和人工两种。机器自动识别为高风险的交易和信息会发送给风控审核人员进行人工审核,机器自动风控的技术和方法也不断通过人工发现的新风险类型进行逐步完善。机器自动风控的技术手段主要有规则引擎和统计模型

小结

这个世界没有绝对的安全,正如没有绝对的自由一样。网站的相对安全是通过提高攻击门槛达到的。让攻击者为了获得有限的利益必须付出更大的代价,致使其得不偿失,望而却步。同时,攻击与防护技术作为一对矛盾共同体,彼此不断此消彼长,今天的高枕无忧,明天可能就成了致命的漏洞。也许网站经过一番大的重构和优化,在某一段时间不需要再处理高可用或高性能的问题,但是修补漏洞、改善安全却是每天都需要面对的课题,永远不能停歇。所以,很遗憾,这个世界没有固若金汤的网站安全架构,架构师只能每天都打起百分百的精神,预防可能的漏洞或者攻击。

系统架构设计——高安全系统架构相关推荐

  1. 系统架构设计——高可扩展性架构

    高可扩展性架构: 国内某大型互联网企业经常因为对同行的产品进行微创新,然后推出自己的产品而遭人诟病,不讨论这种做法是否合适,我们分析这些产品,发现大多数都比原创产品有更好的用户体验.这些产品常常后来居 ...

  2. 什么是系统架构设计:关于架构演进理论

    什么是系统架构设计:关于架构演进理论 在过去软件开发过程发展的很长一段时间内,软件架构表现为一种集中式的单块(Monolithic)式,即先对系统进行分层,然后通过单个进程进行部署和维护,典型的分层体 ...

  3. 干货:从零设计高并发架构

    前言 高并发经常会发生在有大活跃用户量,用户高聚集的业务场景中,如:秒杀活动,定时领取红包等. 为了让业务可以流畅的运行并且给用户一个好的交互体验,我们需要根据业务场景预估达到的并发量等因素,来设计适 ...

  4. 【Elasticsearch】Elasticsearch 集群 运维 高性能 架构设计 高负载

    1.概述 转载:干货 |<深入理解Elasticsearch>读书笔记 5.集群扩展 如何扩展集群? 5.1 垂直扩展 向Elasticsearch集群添加更多的资源.制约因素--如:JV ...

  5. DAE系统的设计-豆瓣首席架构师洪强宁

    DAE系统的设计-豆瓣首席架构师洪强宁 DAE是专门针对Python做的私有PaaS平台,目前已经支撑了427个应用,其中126个是对外应用.对内应用则包括Douban Code平台.豆瓣上线系统Up ...

  6. 【架构实战营】模块二 3.如何设计高可用架构?

    教学目标 理解高可用架构的复杂度本质 掌握高可用架构分析和设计 不要把所有鸡蛋都放到同一个篮子,放到多个篮子! 目录 高可用复杂度模型 计算高可用 存储高可用 1 高可用复杂度模型 高可用架构一般情况 ...

  7. 秒杀系统架构解密与防刷设计 - 高可用架构系列

    转载:http://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=209083286&idx=1&sn=51287666d25c9 ...

  8. 设计高并发架构与系统多级缓存架构如何设计?

    高并发经常会发生在有大活跃用户量,用户高聚集的业务场景中,如:秒杀活动,定时领取红包等. 为了让业务可以流畅的运行并且给用户一个好的交互体验,我们需要根据业务场景预估达到的并发量等因素,来设计适合自己 ...

  9. mysql性能调优与架构设计_了解架构设计远远不够!一文拆解 Tomcat 高并发原理与性能调优

    来源 | 码哥字节 上帝视角拆解 Tomcat 架构设计,在了解整个组件设计思路之后.我们需要下凡深入了解每个组件的细节实现.从远到近,架构给人以宏观思维,细节展现饱满的美.关注「码哥字节」获取更多硬 ...

最新文章

  1. vim 查找并手动替换(笔记)
  2. python工作招聘-学习Python 能找到工作?1300+条招聘信息告诉你答案
  3. 游戏得有活动的场景:代码中生成多行多列的LinearLayout布局
  4. web.config文件中的特殊字符处理
  5. Microsoft Jet 数据库引擎找不到输入表或查询或者找不到文件
  6. LInux 阿里云系统遇到挖矿程序
  7. Csminify:C#源代码的合并/缩小器
  8. 01背包 (dp专题)
  9. mysql中group小计与合计_用SQL实现统计报表中的“小计”和“合计”
  10. 语音识别芯片原理是什么 语音识别芯片有哪些【详解】
  11. Sphinx安装与基本设置
  12. 20165220预备作业3 Linux安装及学习
  13. Sql Full-Text Filter
  14. 《Web编程技术》学习笔记(一)
  15. 金融科技在互联网金融行业性风险防范领域的应用
  16. 【工具使用】无法登陆bing搜索引擎
  17. 162-SOP8液晶手写板专用IC
  18. 用java输出学生信息表代码_使用java导出学生成绩表-excel成绩表
  19. Webpack面试题
  20. 图片转excel的网站

热门文章

  1. 【Unity】场景切换保留数据的解决方案
  2. java st_st.java · cwj/java201621123070 - Gitee.com
  3. java io的异常_Java 异常与IO流
  4. AOP实现操作日志记录
  5. 服务网格:棋到中盘方见势
  6. Python 网页截图
  7. weiphp php版本问题,weiphp有什么功能
  8. JAVA string、int、 double 转换
  9. RGB与十六进制颜色码转换工具
  10. 2021年中国宠物数量、宠物消费及宠物饲料情况分析[图]