大型网站技术架构之安全性
大型网站技术架构之安全性
网站攻击方式
-
XSS(Cross Site Script) 跨站脚本攻击 一般在PC浏览器端
反射性:例如有张图片或者连接,当用户一点击就会执行攻击的脚本,向攻击者服务器发送cookie或密码信息,或者执行一个用户非自愿的一个请求到服务端
持久性:将攻击的脚本信息通过页面的表单保存到了数据库中,当其他人访问到该条记录时就会在其他人浏览器上执行有害脚本,弹出框或盗取cookie
解决:
1、过滤用户输入的参数,在用户查询时也做一次过滤,将带有<img 转化成html 编码字符 <
2、 HttpOnly=true 只能通过http才能获取到cookie,通过script拿不到cooike
-
SQL注入和OS注入
在页面中随着参数信息带上一些SQL语句,例如drop table t; 然后达到攻击数据库的目的
解决:
1、过滤用户参数中和SQL有关的信息
2、将用户参数作为一个字符串传到数据中,预编译和参数绑定
3、避免将具体异常信息抛出到页面上
OS注入:注入OS命令、在编译代码中注入破坏系统的指令,达到攻击的目的
- CSRF(Cross Site Request Forgery) 跨站请求伪造
攻击者利用浏览器的Cookie和Session策略盗取用户身份,伪造用户向服务端发送攻击非法请求
例如 浏览器用户C登录了A服务, 然后点击了某个url然后请求了攻击者服务器B,然后服务器B在响应头加上一个重定向url为请求服务器A,并且带上参数,例如从用户C转1亿到攻击者账户中这样一个请求。
解决:
1、表单token:每次请求需要增加一个动态改变的token参数,这个token可以每次请求之前获取,或者在页面中返回,下次请求带上。这样攻击者就拿不到这个动态token
2、验证码
3、Refer (表示这次请求来自于哪个网站) check 服务A需要检查http 请求头中的refer 是否来自本站,例如攻击者的请求的话refer为攻击者的站点
通过refer check 可以实现图片防盗链( 图片服务器接受图片加载请求,然后判断refer 是否是自己网站的请求,如果不是则拒绝)
-
其他攻击手段
1、Error Code 500异常信息返回到页面上 2、HTML 注释 3、文件上传,如果上次可执行文件 (单独一个服务存放文件) 4、通过url枚举其他文件 避免将服务器目录信息以url展示
信息加密技术
-
MD5加密算法 单向加密技术,不可逆的,MD5算法还可以用作数据摘要,验证数据是否被篡改过,计算的结果具有高度离散随机的特征
-
对称加密算法(DES):高效 但是不安全
-
非对称加密算法: 公钥是公布出去的,私钥只有所有者拥有。比对称加密更安全,但是加密效率不高
用处:
数据加密:A用公钥加密明文数据,只能由B用私钥进行解密
数字签名:签名者用私钥加密数据,发给对方,接受者用签名者公钥的进行解密数据,获得到明文数据,作用就是保证接收方收到的数据一定是来自签名者,因为只有签名者才会有私钥,这个信息是不可抵赖的,具有签名的性质。
-
对称加密和非对称加密混合
HTTPS:就是利用这种方式来保证数据安全传输,非对称加密有个问题就是 私钥加密的数据能被任何一个拿到公钥的客户端进行解密,那么这样还是不能保证数据安全性,所以在每个客户端会动态生成一个对称的加密的**,然后利用非对称公钥加密这个**发到服务端,服务端通过私钥解密出这个**,后面就通过对称加密技术对数据进行传输
浏览器中的证书就是经过权威机构认证的非对称加密的公钥
信息过滤和反垃圾
信息过滤:
1、将敏感词替换成***,对于敏感词和文本少的话使用多级hash就可以解决,如果量大则需使用Trie树结构
反垃圾:
2、信息分类:使用叶贝斯算法,通过垃圾邮件信息样本训练一个模型出来,然后输入一个邮件进而判断是否为垃圾邮件
黑名单:
1、通过将垃圾邮件用户加入黑名单,每次判断来件人是否存在黑名单,如果存在则丢弃邮件, 如果使用hash存放黑名单,如果邮件量达到上亿,使用hashmap数据结构存放不下,因为还需存放额外数据来解决hash冲突,当量一大,查询效率会减慢。
2、布隆过滤器:为了优化以上hashmap实现的困难处,在节省空间和精准之间做了权衡。
将黑名单邮件经过8次不同的hash函数获得hash值,然后将对应的hash值对整个bit 位(例如16G的bit位)取余,将对应8处地方都置为1,然后判断一个邮件时,首先经过8次hash 函数计算对应位数的值是否都为1,若其中一个不为1那么表示不是黑名单邮件,否则为黑名单邮件, 但是严格来说8个位置上都为1也不一定是,因为有可能其他黑名单的邮件已经在8个位置上置为1了,但是概率非常小。
上一篇: 大型网站技术架构读书笔记