网络攻击
CSRF(Cross-site request forgery)
CSRF:跨站请求伪造;用户已登录A站点,且浏览器留有cookie等数据,当用户被攻击者诱导进入B站点,B站点自动执行A站点的某些请求时,浏览器会自动携带A站点的cookie,从而实现接口调用成功。
1. 假设你已经登录了你的银行账户并保持着会话,同时你又在浏览某个恶意网站;(或者不小心通过广告点开恶意网站) 2. 恶意网站携带恶意脚本,执行特定请求,就可能会在你不知情的情况下向你的银行账户发送转账请求,此请求自动会携带站点下的Cookie,利用你已经登录的身份转移你的资金。如果银行没有实施CSRF防护措施,那么这个攻击就可以成功
防御措施: 本质:后端服务识别出请求的来源,是否是第三方站点发起的;并且不可以cookie作为依据,cookie是不安全的公开数据
-
验证来源站点:Http请求头:referer/Origin
-
隐藏域Token验证机制 + httponly
- 恶意站点直接发送特定请求,无法获取对应站点的Token;
- 每次请求资源时,服务端发放Token给客户端(同时保存在服务端),提交表单等操作消耗Token;防止第三方站点直接提交表单;
- 需要配合httponly是为了防止Token被第三方恶意脚本获取;
- Token不要放在Coookie中,恶意链接会直接携带站点下的Cookie,从而携带Token,不安全;
- 可以存放在表单、URL参数,都可以,其他站点是获取不到的;
-
敏感接口禁止跨域访问;
- 服务端设置响应头:Access-Control-Allow-Origin声明可以跨域访问的域名,不允许的则不能从第三方站点跳转时携带资源,如Cookie;
-
敏感操作,二次验证:修改密码、转账等操作,需要验证手机、邮箱等;
XSS(Cross-Site Scripting)
XSS:跨站脚本攻击;攻击者通过在网页中注入恶意脚本,当其他用户访问页面,代码触发执行,来获取用户的敏感信息或执行恶意操作;
- XSS通常出现在用户可自定义、提交的功能中,并且会被存储可由其他用户访问的数据中;比如:网站的公开评论中注入脚本,其他用户访问此评论时,则执行对应恶意脚本,将用户信息发送到特定服务器,实现盗取用户信息;
- Cross-Site Scripting:简写CSS于样式文件名重复,简写为XSS;
- XSS攻击需要将脚本通过某种方式注入到服务端,再由其他用户访问时,执行恶意脚本来实现的;
- web端通常用于登录Cookie,有了Cookie基本上可以直接登录其他用户的账号;
防御:
- 存储用户自定义内容时,正则匹配过滤出各种XSS攻击脚本;
- 禁用特殊字符,如html中的特殊字符:>、<等;
安全随机数
安全随机数:密码学意义上的安全随机数,指随机数具有不可预测性; 能够产生随机数的产生器,根据产生方式分为:物理随机数产生器、非物理随机数产生器;
哈希算法
哈希算法:将任意长度的数据数据,映射为固定长度的摘要、哈希值;
- 单向、不可逆算法;
- 主要用于完整性校验、数据比对等;
- 对于相同的输入,输出必须相同;不同的输入,输出相同概率尽可能小;(哈希冲突)
常见散列算法:
- 不安全:MD5、SHA0、SHA1
- 安全:SHA3、SHA256、SHA512
使用场景:
- 数据完整校验
- 敏感数据比对:对敏感数据进行hash后存储,比对hash值来校验正确性;
- 数字签名:用于校验数据是否被篡改;
- 用做索引
- MySIAM使用哈希索引,仅适用于等值查询,范围查询无法使用Hash;
- 用作数据分片
加解算法
加密方式
- 分组加密(安全性高):通过每次加密固定长度的明文来完成加密,一般按照bit位(64/128位)长度来进行分组,当不够一组时就需要进行填充,一般有5种填充方式:
- 流加密(安全性低):不需要分组;连续不断地处理明文中的各个元素,每次加密一个元素;
加密模式
加密算法通常与加密模式搭配使用 分组加密有几个主流的工作模式:
- ECB模式(电子密码本模式):为不安全的加密模式,禁止直接用于加密;相同的明文产生相同的密文;
- GCM模式:是目前业界推荐使用的对称加密算法工作模式;可以并行加密,效率高;并且提供了签名校验,可以校验密文完整性;
- CBC模式:目前比较模糊,不建议使用;串行的块加密模式,效率低;
对称加密
加密解密都使用相同密钥;
- 算法公开;
- 计算量小,加密速度快,效率高;
- 使用最普遍的加密方式,https在握手完成后,使用对称加密通信
常见算法:
- 安全加密算法:AES
- 不安全的加密算法:RC2、DES(不安全了)、3DES(3次DES,同样不安全)
- 安全的分组加密算法:AES-GCM > 128bit
非对称加密
加密和解密、签名和验签,使用不同的密钥; 用于非对称加密、数字签名;加密效率比对称加密低;
- 公钥:使用公钥对数据进行加密;(建立连接的双方,公钥互相知道)
- 私钥:使用私钥对数据进行解密;(只有自己持有)
工作方式:
(1)双方互相持有对方的公钥; (2)每次发送数据,使用对方的公钥进行加密; (3)拿到数据的一方,用自己的私钥,即可解密;
常见算法
-
RSA、DSA(仅用于签名,不可加解密)、ECIES(集成加密方案)
-
安全非对称加密算法:RSA(≥3072 bits)/ECIES(> 256bits)