大型网站技术架构-8 固若金汤:网站的安全架构

读书笔记 摘自:《大型网站技术架构:核心原理与案例分析-李智慧》


8 固若金汤:网站的安全架构

8.1 道高一尺魔高一丈的网站应用攻击与防御

攻击新浪微博的手段被称作XSS攻击,它和SQL注入攻击构成网站应用攻击最主要的两种手段,全球大约70%的Web应用攻击都来自XSS攻击和SQL注入攻击。此外,常用的Web应用还包括CSRF、Session劫持等手段。

8.1.1 XSS攻击

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

常见的XSS攻击类型有两种,一种是反射型,攻击者诱使用户点击一个嵌入恶意脚本的链接,达到攻击的目的

攻击者可以采用XSS攻击,偷取用户Cookie、密码等重要数据,进而伪造交易、盗窃用户财产、窃取情报。

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

消毒

对某些html危险字符转义,如“>”转义为“&gt”、“<”转义为“&lt”等

消毒几乎是所有网站最必备的XSS防攻击手段。

HttpOnly

对于存放敏感信息的Cookie,如用户认证信息等,可通过对该Cookie添加HttpOnly属性,避免被攻击脚本窃取。

8.1.2 注入攻击

SQL注入攻击和OS注入攻击

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

开源
如果网站采用开源软件搭建,如用Discuz!搭建论坛网站,那么网站数据库结构就是公开的,攻击者可以直接获得。
错误回显
故意构造非法参数,使服务端异常信息输出到浏览器端,为攻击猜测数据库表结构提供了便利。
盲注
防御SQL注入攻击首先要避免被攻击者猜测到表名等数据库表结构信息
消毒
通过正则匹配,过滤请求数据中可能注入的SQL
参数绑定
使用预编译手段,绑定参数是最好的防SQL注入方法。
攻击者的恶意SQL会被当做SQL的参数,而不是SQL命令被执行。

8.1.3 CSRF攻击

CSRF(Cross Site Request Forgery,跨站点请求伪造),攻击者通过跨站请求,以合法用户的身份进行非法操作

CSRF的主要手法是利用跨站请求,在用户不知情的情况下,以用户的身份伪造请求。其核心是利用了浏览器Cookie或服务器Session策略,盗取用户身份。

CSRF的防御手段主要是识别请求者身份

表单Token
表单Token通过在请求参数中增加随机数的办法来阻止攻击者获得所有请求参数
服务器检查请求参数中Token的值是否存在并且正确以确定请求提交者是否合法。
验证码
Referer check
很多网站使用这个功能实现图片防盗链(如果图片访问的页面来源不是来自自己网站的网页就拒绝)。

8.1.4 其它攻击和漏洞

Error Code
防御手段也很简单,通过配置Web服务器参数,跳转500页面(HTTP响应码500表示服务器内部错误)到专门的错误页面即可,Web应用常用的MVC框架也有这个功能。

HTML注释

文件上传
最有效的防御手段是设置上传文件白名单,只允许上传可靠的文件类型。此外还可以修改文件名、使用专门的存储等手段,保护服务器免受上传文件攻击。

路径遍历
防御方法主要是将JS、CSS等资源文件部署在独立服务器、使用独立域名,其他文件不使用静态URL访问,动态参数不包含文件路径信息。

Web应用防火墙

ModSecurity是一个开源的Web应用防火墙,探测攻击并保护Web应用程序,既可以嵌入到Web应用服务器中,也可以作为一个独立的应用程序启动。

ModSecurity采用处理逻辑与攻击规则集合分离的架构模式。

除了开源的ModeSecurity,还有一些商业产品也实现Web应用防火墙功能,如NEC的SiteShell。

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

单项散列加密、对称加密和非对称加密。

8.2.1 单向散列加密

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

由于人们设置密码具有一定的模式,因此通过彩虹表(人们常用密码和对应的密文关系表)等手段可以进行猜测式破解。

为了加强单向散列计算的安全性,还会给散列算法加点盐(salt),salt相当于加密的密钥,增加破解的难度。

8.2.2 对称加密

对称加密是指加密和解密使用的密钥是同一个密钥(或者可以互相推算)

对称加密通常用在信息需要安全交换或存储的场合,如Cookie加密、通信加密等。

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

8.2.3 非对称加密

非对称加密和解密使用的密钥不是同一密钥,其中一个对外界公开,被称作公钥,另一个只有所有者知道,被称作私钥。

非对称加密技术通常用在信息安全传输,数字签名等场合。

在实际应用中,常常会混合使用对称加密和非对称加密。先使用非对称加密技术对对称密钥进行安全传输,然后使用对称加密技术进行信息加解密与交换。而有时,对同一个数据两次使用非对称加密,可同时实现信息安全传输与数字签名的目的。

一种方案是把密钥和算法放在一个独立的服务器上,甚至做成一个专用的硬件设施,对外提供加密和解密服务,应用系统通过调用这个服务,实现数据的加解密。

另一种方案是将加解密算法放在应用系统中,密钥则放在独立服务器中,为了提高密钥的安全性,实际存储时,密钥被切分成数片,加密后分别保存在不同存储介质中,兼顾密钥安全性的同时又改善了性能

8.3 信息过滤与反垃圾

8.3.1 文本匹配

文本匹配主要解决敏感词过滤的问题。通常网站维护一份敏感词列表,如果用户发表的信息含有列表中的敏感词,则进行消毒处理(将敏感词转义为*)或拒绝发表。

Trie算法的本质是确定一个有限状态自动机,根据输入数据进行状态转移。双数组Trie算法优化了Trie算法,利用两个稀疏数组存储树结构,base数组存储Trie树的节点,check数组进行状态检查。双数组Trie数需要根据业务场景和经验确定数组大小,避免数组过大或者冲突过多。

另一种更简单的实现是通过构造多级Hash表进行文本匹配。

该方案处理速度较快,稍加变形,即可适应各种过滤场景,缺点是使用Hash表会浪费部分内存空间,如果网站敏感词数量不多,浪费部分内存还是可以接受的。

8.3.2 分类算法

垃圾邮件等内容的识别比较好的自动化方法是采用分类算法。

比较简单实用的分类算法有贝叶斯分类算法,这是一种利用概率统计方法进行分类的算法。

贝叶斯算法得到的分类判断是一个概率值,因此会存在误判(非垃圾邮件判为垃圾邮件)和漏判

由于贝叶斯分类算法简单,处理速度快,仍是许多实时在线系统反垃圾的首选。

8.3.3 黑名单

黑名单可以通过Hash表实现,该方法实现简单,时间复杂度小,满足一般场景使用。

在对过滤需求要求不完全精确的场景下,可用布隆过滤器代替Hash表。

通过一个二进制列表和一组随机数映射函数实现

可以看到,处理同样数量的信息,布隆过滤器只使用Hash表所需内存的1/8。但是布隆过滤器有可能导致系统误判(布隆过滤器检查在黑名单中,但实际却并未放入过)。

因为一个邮箱地址映射的8个bit可能正好都被其他邮箱地址设为1了,这种可能性极小,通常在系统可接受范围内。但如果需要精确的判断,则不适合使用布隆过滤器。

8.4 电子商务风险控制

交易安全是电子商务网站的底线。

8.4.1 风险

账户风险
买家风险
卖家风险
交易风险

8.4.2 风控

机器自动风控的技术和方法也不断通过人工发现的新风险类型进行逐步完善。

机器自动风控的技术手段主要有规则引擎和统计模型。
1.规则引擎
规则引擎是一种将业务规则和规则处理逻辑相分离的技术,业务规则文件由运营人员通过管理界面编辑,当需要修改规则时,无需更改代码发布程序,即可实时使用新规则。而规则处理逻辑则调用规则处理输入的数据

2.统计模型
规则引擎虽然技术简单,但是随着规则的逐渐增加,会出现规则冲突,难以维护等情况,而且规则越多,性能也越差。

风控领域使用的统计模型使用前面提到的分类算法或者更复杂的机器学习算法进行智能统计。

经过充分训练后的统计模型,准确率不低于规则引擎。分类算法的实时计算性能更好一些,由于统计模型使用模糊识别,并不精确匹配欺诈类型规则,因此对新出现的交易欺诈还具有一定预测性。

8.5 小结

网站的相对安全是通过提高攻击门槛达到的。让攻击者为了获得有限的利益必须付出更大的代价,致使其得不偿失,望而却步。

也许网站经过一番大的重构和优化,在某一段时间不需要再处理高可用或高性能的问题,但是修补漏洞、改善安全却是每天都需要面对的课题,永远不能停歇。


===========文档信息============
读书笔记由博主整理编辑,供非商用学习交流用
版权声明:非商用自由转载-保持署名-注明出处
署名(BY) :dkjkls(dkj卡洛斯)
文章出处:http://blog.csdn.net/dkjkls

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值