读书笔记:网站架构之安全篇
目录:
一、网站应用攻击与防御
二、信息加密技术
三、信息过滤及反垃圾
PS:本文为《大型网站技术架构 & 核心原理与案例分析(李智慧 著)》一书的读书笔记
// =======================================================================================
网站应用攻击与防御
*:全球约70%的Web应用攻击来自XSS攻击和SQL注入,此外还包括CSRF,Session劫持等
一、XSS攻击
1、XSS攻击:跨站点脚本攻击(Cross Site Script)
*:黑客通过在网页文件嵌入恶意JavaScript脚本,在用户打开网页时,该脚本控制浏览器进行恶意操作
*:反射型XSS:攻击者诱使用户点击一个嵌入恶意脚本的链接,恶意脚本在攻击者服务器中
*:持久性XSS:攻击者提交带恶意脚本的请求,保存在被攻击Web站点的服务器中,用户正常访问Web站点均受攻击
2、主要防御手段
*:消毒:对特殊字符转义,如"< >"等
*:HttpOnly属性:Cookie添加HttpOnly属性,使得攻击者无法通过JavaScript脚本窃取Cookie
二、SQL注入
1、SQL注入:指攻击者在HTTP请求中注入恶意SQL命令,使得应用服务器调用请求构造SQL时和恶意SQL命令一起构造,并在数据库执行
2、SQL注入需攻击者了解数据库结构,一般攻击者对通过下面方式获取:
*:开源软件,如Discuz等
*:网站的错误回显
*:猜测性的盲注
3、主要防御手段
*:消毒:通过正则表达式过滤"drop table"等可能注入的SQL
*:参数绑定:使用预编译绑定参数是最好的手段,恶意SQL只会被当成SQL参数而不是命令
三、CSRF攻击(身份伪造)
1、CSRF攻击:跨站点请求伪造(Cross Site Request Forgery)
*:攻击者通过跨站请求,以合法用户的身份进行非法操作,如转账交易等
*:核心为利用用户浏览器Cookie或服务器Session策略,盗取用户身份
2、主要防御手段
*:表单Token:CSRF伪造用户请求,需构造用户请求的所有参数,表单Token通过在请求参数中增加一个随机数Token来阻止,每次响应页面Token均不同
*:验证码:即需手动输入验证码,但这是一个不好的用户体验
*:Referer源检查:Http请求头的Referer域中记录着请求来源,通过检查请求来源判断请求是否合法
四、其他攻击和漏洞
1、错误回显:即Web服务器异常时,直接把异常堆栈信息输出给客户端浏览器
*:防御方案很简单,只需配置跳转500页面到专门错误页面即可
2、HTML注释:在客户端的HTML代码中注释相关程序信息,给黑客造成攻击便利
3、文件上传:攻击者可以用网站提供的文件上传功能上传可执行文件
*:可通过限定上传文件格式等方式来防御
4、路径遍历:攻击者在URL中使用相对路径,遍历系统未开放的目录和文件
*:防御方法主要为将Js、HTML等资源文件独立部署等
// ===========================================================
信息加密技术
一、单向散列加密
*:单向散列加密指通过对不同输入长度的信息进行散列计算,得到固定长度的输出,如MD5和sha1等
*:虽然没有破解单向散列加密的算法,但是由于人为设置密码有一些常见模式(如123等),因此攻击者常用彩虹表(人为常用密码和对应密文的映射)等方式进行猜测式破解
*:为了加强单向散列计算的安全性,还可以给散列算法加盐,盐相当于加密的密钥
二、对称加密
*:对称加密指加密和解密使用同一个密钥,如DES和RC等。常用于信息需要安全交换和存储的场合,如Cookie加密等
*:优点是算法简单、加密效率高,缺点是远程通信如何安全地交换密钥是个难题
三、非对称加密
*:非对称加密的加密和解密使用不同密钥,其中一个对外公开的公钥,一个只有所有者知道的私钥,如RSA等。常用于信息安全传输,数字签名等场合
*:用公钥加密的信息需要用私钥才能解开,相反,用私钥加密的信息只有公钥能解开
四、密钥安全管理
*:前面讲述的这几种加密,能够起到安全效果的一个重要前提就是密钥的安全,即信息的安全是靠密钥保证的
*:方案1:把密钥和算法放在独立服务器上由专人维护。较安全,但应用性能开销较大,每次加解密都需要一次远程服务调用
*:方案2:把加解密算法放在应用服务器,密钥放在独立服务器。可把密钥切分成片分别存储,兼顾安全性又改善性能
// ===========================================================
信息过滤及反垃圾
一、文本匹配
*:主要用于解决敏感词过滤问题
*:可使用正则表达式,但其效率较低,基本都是使用Trie树的变种,空间和时间复杂度都比较好
二、分类算法
*:主要用于网站垃圾信息的识别
*:简单实用的分类算法是贝叶斯分类,这是利用概率统计方法进行分类的算法
三、黑名单
*:将发布过垃圾信息的IP或者用户列入黑名单,以后将这些IP或者用户的信息过滤掉
*:黑名单可以用Hash表实现,存于内存做计算,但如果黑名单很大会很占内存。在需求不需完全精确情况下,可使用布隆过滤器替代Hash表