第七章 随需应变:网站的可扩展架构
扩展性:只对现有系统形象最小的情况下,系统的可持续扩展或提升能力。
伸缩性:指系统通过增加(减少)自身资源规模的方式,增加(减少)系统计算处理事务的能力。
7.1构建可扩展的网络架构
设计网站可扩展架构的核心思想是模块化,并在此基础上,降低模块间的耦合性,提高模块的复用性。
7.2利用分布式消息队列降低系统耦合性
模块之间不存在直接调用那么新增模块或者修改模块就对其他模块影响最小,这样系统的可扩展性最好。
7.2.1事件驱动架构
事件驱动架构:通过在低耦合的模块之间传输事件消息,以保持模块的松散耦合。
7.2.2分布式消息队列
7.3利用分布式服务打造可复用的业务平台
7.3.1Web Service与企业级分布式服务
Web是早期的企业应用开发很时髦的词汇,但是有以下缺点:
1.臃肿的注册和触发机制
2.低效的XML序列化手段
3.开销相对较高的HTTP远程通信
4.复杂的部署与维护手段
7.3.2大型网站分布式的 需求与特点
负载均衡
失效转移
搞笑的远程通信
整合异构系统
对应用最少侵入
版本管理实时监控
7.3.3分布式服务架构设计
服务消费者程序通过服务接口使用服务,而服务接口通过代理加载具体服务,具体服务可以是本地代码,也可以是远程服务因此对应用侵入较少:应用程序只需要调用服务接口,服务框架根据配置自动调用本地或远程实现。
服务框架客户端模块中心通过服务注册中心 ,加载服务提供者列表,查找需要的服务接口,并根据配置的负载均衡策略将服务调用请求发送到某台提供服务的服务器,如果服务调用失败,客户端会自动从服务者列表选择一个相同服务的另一台服务器,重新请求服务,实现服务的自动转移失效,保证服务高可用。
第八章 固若金汤:网站的安全架构
8.1网站应用攻击和防御
8.1.1XSS攻击
XSS即跨站点脚本攻击,通过黑客篡改网页,注入恶意HTML代码,在用户浏览页面时候,控制用户浏览器进行恶意操作的攻击
常见的XSS分为两种一种是反射型
另一种是持久型XSS攻击
XSS攻击的主要防止手段:
消毒:对html危险字符进行转义。
HttpOnly:禁止页面JavaScript访问带有HttpOnly的Cookie,也就是对Cookie添加用户验证,防止脚本窃取Cookie
8.1.2注入攻击
SQL注入和OS注入两种
SQL注入需要获取表结构,攻击者获取表结构主要有以下手法:
开源
错误回显
盲注:根据页面变化,判断SQL执行情况,猜测表结构
防止SQL注入:
消毒:正则表达式过滤可能SQL注入
参数绑定:SQL预编译和参数绑定,恶意SQL会被当作参数不会当作命令
8.1.3CSRF攻击(Cross Site Request Forgery跨站点请求伪造攻击)
其核心是利用浏览器Cookie和服务器Session,盗取用户身份
防御手段主要是识别请求者身份:
表单Token
验证码
Referer check:HTTP请求头Referer中包含请求来源,可通过检测请求来源检测是否合法
8.1.4其他攻击和漏洞
Error Code
HTML注释
文件上传
路径遍历
8.1.5Web应用防火墙
例如ModSecurity
ModSecuriy采用逻辑与攻击分离的设计架构。处理逻辑(执行引擎)负责请求和响应的拦截过滤,规则加载执行功能。而攻击规则集合负责描述对具体攻击的规则定义,模糊识别,防御策略等功能。
8.2信息加密技术和密钥安全管理
8.2.1单向散列加密
明文通过散列算法加密获得密文,此过程不可逆,验证时需要将用户新输入的密码重新加密,两个密文进行比较,常见的如MD5加密算法,为了加强散列算法的复杂度通常加salt处理。
8.2.2对称加密
此类型加密方式简单,高效,系统开销小,但是加密解密都是一个密钥,交换密钥是一个问题,常见对称加密算法有DES算法,RC算法。
8.2.3非对称加密
常用于信息安全传输和数字签名
信息传输:A利用B的公钥加密明文,然后通过公共渠道传输(即使被截获没有私钥依然无法得到明文),B接到密文利用自己的私钥解密得到明文。
数字签名:签名发放者利用自己的私钥加密,获得者可以用公钥解密,由于私钥只有发送者有,可以具有签名的作用
8.3信息过滤与反垃圾
8.3.1文本匹配
主要解决敏感词过滤,主要通过敏感词过滤树,提高敏感词比对速率。比如:阿拉伯,阿拉汗,阿油,北京北大荒,北风。
8.3.2分类算法
常用的是贝叶斯算法,如垃圾邮件出现“茶叶”概率为20%,非垃圾邮件概率为1%,就能得到分类模型。是一个概率值,会出现误判。