安全架构
1 道高一尺魔高一丈的网站应用攻击与防御
1.1 XSS攻击
1.1.1 反射型XSS攻击
![](https://static001.geekbang.org/infoq/0a/0a5c3d076f85523324aa41e68f618399.png)
1.1.2 持久型XSS攻击
![](https://static001.geekbang.org/infoq/54/54cd0cc1ad39acffcf4c5c1e4eea3c7e.png)
1.1.3 防御手段
消毒。进行HTML危险字符转义,比如说"<img src ="中的">"转义为">"等等,这样就可以避免大部分攻击。为了避免对不必要的内容错误转义,如"3<5"中的"<"需要进行文本匹配后再转义。消毒几乎是所有网站最必备的XSS防攻击手段。
HttpOnly。浏览器禁止页面JS访问带有HttpOnly属性的Cookie。HttpOnly并不是直接对抗XSS攻击的,而是防止XSS攻击者窃取Cookie。对于存放敏感信息的Cookie,如用户认证信息等,可通过对该Cookie添加HttpOnly属性,避免被攻击脚本窃取。
1.2 SQL注入攻击
1.2.1 SQL注入攻击
就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
SQL注入攻击需要了解数据库表结构才能进行攻击,然后获取数据库表结构的手段有如下几种:
开源:网站采用开源软件搭建,所以数据库结构是公开的。
错误回显:通过网站返回错误信息进行猜测
盲注:网站关闭错误回显,攻击者根据页面变化情况判断SQL语句的执行情况,据此猜测数据库表结构,此种方式攻击难度较大。
1.2.2 防御手段
消毒。将请求数据中含有的sql,如"drop table"等。
参数绑定:使用预编译手段,绑定参数是最好的防SQL注入方法。目前许多数据访问层框架,如IBatis,Hibernate等,都实现SQL预编译和参数绑定,攻击者的恶意SQL会被当作SQL的参数,而不是SQL命令被执行。
1.3 CSRF注入攻击
1.3.1 CSRF注入攻击
CSRF(Cross Site Request Forgery, 跨站点请求伪造),攻击者通过跨站请求,以合法用户的身份进行非法操作,如转账交易、发表评论等。其核心是利用了浏览器Cookie或服务器Session策略,盗取用户身份。
1.3.2 防御手段
表单Token
CSRF是一个伪造用户请求的操作,所以需要构造用户请求的所有参数才可以。表单Token就是阻止攻击者获取所有请求参数的可能,在页面表单中增加一个随机数token,每次请求的token都不同,请求提交后检查token的值是否正确以确定提交请求者是否合法。
验证码
提交请求时,需要用户输入验证码,以避免用户在不知情的情况下被攻击者伪造请求。
Referer check
HTTP请求偷的referer域中记录着请求来源,可通过检查请求来源,验证其是否合法。但是该方法有一定局限性,referer也并不一定总能得到。
1.4 其他攻击与漏洞
1.4.1 Error Code
也称作错误回显,许多 Web服务器默认是打开异常信息输出的,即服务器端未处理的异常堆栈信息会直接输出到客户端浏览器,这种方式虽然对程序调试和错误报告有好处,但同时也给黑客造成可乘之机。通过故意制造非法输入,使系统运行时出错,获得异常信息,从而寻找系统漏洞进行攻击。防御手段也很简单,通过配置 Web 服务器参数,跳转500页面(HTTP 响应码500表示服务器内部错误)到专门的错误页面即可,这个功能Web 应用常用的MVC框架也可以做到。
1.4.2 HTML注释
HTML 注释∶为了程序调试方便或其他不恰当的原因,有的时候程序开发人员会在 PHP、JSP等服务器页面程序中使用 HTML 注释语法进行程序注释,这些HTML注释就会显示在客户端浏览器,给黑客造成攻击便利。程序最终发布前需要进行代码 review或自动扫描,避免HTML 注释漏洞。
1.4.3 文件上传
文件上传∶一般网站都会有文件上传功能,设置头像、分享视频、上传附件等。如果上传的是可执行的程序,并通过该程序获得服务器端命令执行能力,那么攻击者几乎可以在服务器上为所欲为,并以此为跳板攻击集群环境的其他机器。最有效的防御手段是设置上传文件白名单,只允许上传可靠的文件类型。此外还可以修改文件名、使用专门的存储等手段,保护服务器免受上传文件攻击。
1.4.4 路径遍历
攻击者在请求的 URL中使用相对路径,遍历系统未开放的目录和文件。防御方法主要是将JavaScript、CSS等资源文件独立服务器、独立域名,其他文件不使用静态URL访问,动态参数不包合文件路径信息。
1.5 Web应用防火墙
开源 Web 应用防火墙 ModSecurity
ModSecurity 是一个开源的 Web 应用防火墙,探测攻击并保护 Web 应用程序,既可以嵌入到Web 应用服务器中,也可以作为一个独立的应用程序启动。ModSecurity 最早只是 Apache的一个模块,现在已经有 Java、NET多个版本,并支持Nginx。
ModSecurity采用处理逻辑与规则集合分离的架构模式。处理逻辑负责请求和响应的拦截过滤,规则加载执行等功能。而规则集合则负责对具体的攻击的规则定义、模式识别、防御策略等功能。处理逻辑比较稳定,规则集合需要不断针对漏洞进行升级,这是一种可扩展的架构设计。
1.6 网站安全漏洞扫描
和电脑安全漏洞扫描一样,网站也需要安全漏洞扫描。
网站安全漏洞扫描工具是根据内置规则,模拟黑客攻击行为,用以发现网站安全漏洞的工具。许多大型网站的安全团队都有自己开发的漏洞扫描工具,不定期的对网站的服务器进行扫描,查洞补缺。
目前市场上也有很多商用的网站安全漏洞扫描平台。
2 信息加密技术及密钥安全管理
2.1 单向散列加密
![](https://static001.geekbang.org/infoq/71/7107e0aff820cec886ad891465ac423a.png)
2.2 对称加密
加密密钥==解密密钥
![](https://static001.geekbang.org/infoq/e0/e05466e88579e06026062431829d8d52.png)
2.3 非对称加密
加密密钥!=解密密钥
![](https://static001.geekbang.org/infoq/c9/c97a3c182f819315d9e9b93b76937fd2.png)
2.4 密钥安全管理
![](https://static001.geekbang.org/infoq/cf/cf6d53c953ac54f4866d8954d402f984.png)
3 信息过滤与反垃圾
3.1 反垃圾邮件
![](https://static001.geekbang.org/infoq/a4/a4dd1cd62b2c48de50f002db4baae71c.png)
![](https://static001.geekbang.org/infoq/31/31b4a6279a78845128d5cfd73023e8c8.png)
3.2 黑名单
通过布隆算法实现黑名单判断
![](https://static001.geekbang.org/infoq/ca/ca6196ac09d236d8bb0a6563b20a2aa2.png)
4 电子商务风险控制
4.1 风险
电子商务网站在给人们代理购物交易的极大便利的同时,也将风险带给了对网络安全一无所知的人们。由于买卖双方的信息不对等,交易本来就存在风险,而当交易在网上发生的时候,买卖双方彼此一无所知,交易风险也就更加难以控制。如果一个电商网站骗子横行,诚信的交易者屡屡被骗,那么网站就到了最危险的时候,可以说,交易安全是电子商务网站的底线。
电子商务具有多种形式,B2B,B2C,C2C每种交易的场景都不相同,风险也各有特点,大致可分为以下几种∶
账户风险∶包括账户被黑客盗用,恶意注册账号等几种情形。
买家风险∶买家恶意下单占用库存进行不正当竞争;黄牛利用促销抢购低价商品;此外还有良品拒收,欺诈退款以及常见于 B2B交易的虚假询盘等。
卖家风险∶不良卖家进行恶意欺诈的行为,例如货不对板,虚假发货,炒作信用等,此外还有发布违禁商品、侵权产品等。
交易风险∶信用卡盗刷,支付欺诈,洗钱套现等。
4.2 风控
大型电商网站都配备有专门的风控团队进行风险控制,风控的手段也包括自动和人工两种方式。机器自动识别为高风险的交易和信息会发送给风控审核人员进行人工审核,机器自动风控的技术和方法也不断通过 人工发现的新风险类型进行逐步完善。
机器自动风控的技术手段主要有规则引擎和机器学习。
4.2.1 规则引擎
当交易的某些指标满足一定条件的时候,就会被认为具有高风险的欺诈可能性。比如∶
用户来自欺诈高发地区;
交易金额超过某个数值;
和上次登录的地址距离差距很大;
用户登录地与收货地不符;
用户第一次交易;
……
大型网站在运营过程中,结合业界的最新发现,会总结出数以千计的此类高风险交易规则。一种方案是在业务逻辑中通过编程方式使用 if.else..代码实现这些规则,可以想见,这些代码会非常庞大,而且由于运营过程中不断发现新的交易风险类型,需要不断调整规则,代码也需要不断修改.
![](https://static001.geekbang.org/infoq/30/308fe2f6b690a748b936cc2f1e84e5f4.png)
4.2.2 机器学习
规则引擎虽然技术简单,但是随着规则的逐渐增加,出现规则冲突,难以维护等情况,而且规则越多,性能也越差。大型互联网应用更倾向于使用机器学习模型进行风控。
![](https://static001.geekbang.org/infoq/12/12cd095a9fee01583b2ca3528faba38c.png)
版权声明: 本文为 InfoQ 作者【王海】的原创文章。
原文链接:【http://xie.infoq.cn/article/6317de24904909e5c869f4b16】。未经作者许可,禁止转载。
评论