网络安全
1. 什么是 JWT?主要用来做什么?
JWT:Json Web Token,是基于 Json 的一个公开规范,这个规范允许我们使用 JWT 在用户和服务器之间传递安全可靠的信息,他的两大使用场景是:认证和数据交换
2. JWT 由几部分组成?分别是什么?
一个 JWT 实际上就是一个字符串,它由三部分组成:头部、载荷与签名
3. JWT 校验 token 时,怎么保证数据并没有被黑客拦截并篡改?
signature 中有私钥来进行签名,可以保证安全性
4. Session + Cookie 实现
客户端登录成功后,服务器会给每一台主机分配一个唯一的 session_id,用来区分他们,除了存入服务器的缓存,数据库或者内存中,还会把这个 session_id 返回给相应的客户端
客户端收到 session_id 后会存入 cookie 中,以后每一次发送其他类型的请求的操作都会携带这个 session_id
服务器会将客户端发来的这个 session_id 和服务端查到的 session_id 进行对比,如果匹配,则返回给对应主机所需要的资源,否则拒绝
缺点
因为服务器缓存 session_id,需要定期清理 session_id 表
不能识别跨域请求
在分布式 (即多台服务器) 的环境下,还得做 session 同步,一般不推荐,
5. JWT 的缺陷
不安全的加密算法 JWT 给开发者提供了很多的加密算法选择,其中就包括了已知的易受攻击的算法
在 header 中包含了签名算法的种类 攻击者只需要将 header 中的 alg 字段设置为 none 就可以绕过签名验证过程,在知道服务器使用非对称加密算法的情况下,修改 alg 为一个对称加密算法
6. Paseto 相比 JWT 的改变
不会向用户开放所有的加密算法
header 中不再含有 alg 字段,也不会有 none 算法
payload 使用加密算法,而不是简单的编码
7. CSRF 攻击
攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。
8. 防御 CSRF 攻击
前面讲到 CSRF 的一个特征是,攻击者无法直接窃取到用户的信息(Cookie,Header,网站内容等),仅仅是冒用 Cookie 中的信息。
而 CSRF 攻击之所以能够成功,是因为服务器误把攻击者发送的请求当成了用户自己的请求。那么我们可以要求所有的用户请求都携带一个 CSRF 攻击者无法获取到的 Token。服务器通过校验请求是否携带正确的 Token,来把正常的请求和攻击的请求区分开,也可以防范 CSRF 的攻击。
9. XSS CSRF SSRF 区别以及防范
XSS(跨站脚本攻击):
原理:攻击者通过在网页中插入恶意脚本,使用户在浏览器中执行该脚本,从而获取用户的敏感信息或进行其他恶意操作。
防御方式:对用户输入进行过滤和转义、使用 HTTP Only 属性禁止 JavaScript 读取 Cookie 值、输入时校验、浏览器与 Web 应用端采用相同的字符编码等。
CSRF(跨站请求伪造):
原理:攻击者利用用户已登录的身份,通过伪造请求发送到受信任的网站,使用户在不知情的情况下执行恶意操作。
防御方式:使用随机化的 CSRF 令牌来验证请求的合法性。
SSRF(服务器端请求伪造):
原理:攻击者通过构造恶意请求,使服务器发起对内部资源的请求,从而获取敏感信息或攻击内部系统。
防御方式:限制协议为 HTTPS、限制 URL 白名单、限制内网 IP 等。
10. SSL 加密算法
对称加密算法
DES:DES 是最早被推出的加密算法之一,但由于密钥长度短,容易被暴力破解,已于 2005 年被弃用。
3DES:3DES 是 DES 算法的升级版,通过三次加密提高了安全性,但也存在严重安全漏洞,预计 2023 年后将被废弃。
AES:AES 是 DES 的替代方案,是目前使用最广泛的对称加密算法之一。AES 密钥长度为 128、192 或 256 位,安全性高,广泛用于金融、在线交易等领域。
非对称加密算法
RSA:RSA 是 1977 年发明的非对称加密算法,是目前使用最广泛的公钥算法。其安全性建立在素数分解的困难性上,即使用超级计算机也很难破解。
ECC:ECC 又称椭圆曲线加密算法,相比 RSA 可以使用更短的密钥实现更高的安全性。160 位 ECC 加密安全性相当于 1024 位 RSA。
SSL 握手过程中,客户端和服务器通过非对称加密算法协商对称加密算法的密钥,然后使用对称加密算法加密传输的数据。这样既保证了密钥交换的安全性,又提高了数据加密的效率。
11. 对称加密和非对称加密有什么区别
对称加密
对称加密使用相同的密钥进行数据的加密和解密。发送方和接收方必须在通信前共享这个密钥。
非对称加密
非对称加密使用一对密钥,即公钥和私钥。公钥可以公开,而私钥必须保密。
Last updated