《大型网站技术架构》读书笔记8 架构-网站的安全架构
网站的安全架构
-
网站应用攻击最主要的两种手段:XSS攻击和SQL注入攻击
-
XSS攻击:黑客通过篡改网页,注入恶意HTML脚本,在用户浏览网页时,控制用户浏览器进行恶意操作的一种攻击方式。
常见的XSS攻击类型有两种,一种是反射型,攻击者诱使用户点击一个嵌入恶意脚本的链接,达到攻击的目的。另外一种XSS攻击是持久型XSS攻击,黑客提交含有恶意脚本的请求,保存在被攻击的Web站点的数据库中,用户浏览网页时,恶意脚本被包含在正常页面中,达到攻击的目的。
防御手段:请求参数消毒,浏览器禁止页面JavaScript访问带有HttpOnly属性的Cookie。
反射型XSS攻击
持久型XSS攻击
-
注入攻击:分为SQL注入攻击和OS注入攻击
-
SQL注入攻击:攻击者在HTTP请求中注入恶意SQL命令(drop tableusers;),服务器用请求参数构造数据库SQL命令时,恶意SQL被一起构造,并在数据库中执行。
防御手段:请求参数消毒,使用预编译手段、绑定参数。
-
其他常见web应用攻击:CSRF、Session劫持等
-
CSRF攻击:攻击者通过跨站请求,以合法用户的身份进行非法操作,如转账交易、发表评论等。
防御手段:表单Token、验证码、Referer check(HTTP请求头的Referer域中记录着请求来源,可通过检查请求来源,验证其是否合法)
-
其他攻击和漏洞:
Error Code错误回显:通过配置web服务器参数,跳转500页面到专门的错误页面即可,web应用常用的MVC框架有这个功能。
HTML注释显示在客户端浏览器:程序最终发布前需要进行代码review或自动扫描,避免HTML注释漏洞。
文件上传:设置上传文件白名单,只允许上传可靠的文件类型。此外还可以修改文件名、使用专门的存储等手段,保护服务器免受上传文件攻击。
路径遍历:将JS、CSS等资源文件部署在独立服务器、使用独立域名,其他文件不使用静态URL访问,动态参数不包含文件路径信息。
Web应用防火墙
- 有一款产品能够统一拦截请求,过滤恶意参数,自动消毒、添加Token,并且能够根据最新攻击和漏洞情报,不断升级对策,处理掉大多数令人头痛的网站攻击。
- ModSecurity是一个开源的Web应用防火墙,探测攻击并保护Web应用程序,既可以嵌入到Web应用服务器中,也可以作为一个独立的应用程序启动。ModSecurity最早只是Apache的一个模块,现在已经有Java、.NET多个版本,并支持Nginx。
- ModSecurity采用处理逻辑与攻击规则集合分离的架构模式。处理逻辑(执行引擎)负责请求和响应的拦截过滤,规则加载执行等功能。而攻击规则集合则负责描述对具体攻击的规则定义、模式识别、防御策略等功能(可以通过文本方式进行描述)。处理逻辑比较稳定,规则集合需要不断针对漏洞进行升级,这是一种可扩展的架构设计。
网站安全漏洞扫描
- 网站安全漏洞扫描工具是根据内置规则,构造具有攻击性的URL请求,模拟黑客攻击行为,用以发现网站安全漏洞的工具。
信息加密技术
- 为了保护网站的敏感数据,应用需要对这些信息进行加密处理,信息加密技术可分为三类:单向散列加密、对称加密和非对称加密。
- 单向散列加密:通过对不同输入长度的信息进行散列计算,得到固定长度的输出,这个散列计算过程是单向的,即不能对固定长度的输出进行计算从而获得输入信息。实现密码加密保存
为了加强单向散列计算的安全性,还会给散列算法加点盐(salt),salt相当于加密的密钥,增加破解的难度。
常用的单向散列算法有MD5、SHA等。 - 对称加密:指加密和解密使用的密钥是同一个密钥(或者可以互相推算)。
通常用在信息需要安全交换或存储的场合,如Cookie加密、通信加密等。
优点是算法简单,加解密效率高,系统开销小,适合对大量数据加密。
缺点是加解密使用同一个密钥,远程通信的情况下如何安全的交换密钥是个难题,如果密钥丢失,那么所有的加密信息也就没有秘密可言了。
常用的对称加密算法有DES算发、RC算法等。 - 非对称加密:非对称加密和解密使用的密钥不是同一密钥,其中一个对外界公开,被称作公钥,另一个只有所有者知道,被称作私钥。用公钥加密的信息必须用私钥才能解开,反之,用私钥加密的信息只有用公钥才能解开。理论上说,不可能通过公钥计算获得私钥。
通常用在信息安全传输,数字签名等场合。
常用算法有RSA算法等。
密钥安全管理
- 密钥:单向散列加密用到的salt、对称加密的密钥、还是非对称加密的私钥。
- 改善密钥安全性的手段之一:把密钥和算法放在一个独立的服务器上,甚至做成一个专用的硬件设施,对外提供加密和解密服务,应用系统通过调用这个服务,实现数据的加解密。
这种方案成本较高,而且有可能会成为应用的瓶颈,每次加密、解密都需要进行一次远程服务调用,系统性能开销也较大。 - 改善密钥安全性的手段之二:将加解密算法放在应用系统中,密钥则放在独立服务器中,为了提高密钥的安全性,实际存储时,密钥被切分成数片,加密后分别保存在不同存储介质中,兼顾密钥安全性的同时又改善了性能。
加解密服务接口通过密钥服务器的密钥服务取得加解密密钥,并缓存在本地(定时更新)。
密钥服务器中的密钥则来自多个密钥存储服务器,一个密钥分片后存储在多个存储服务器中,每个服务器都有专人负责管理。
密钥申请者、密钥管理者、安全审核人员通过密钥管理控制台管理更新密钥,每个人各司其事,没有人能查看完整的密钥信息。