安全

1. 什么是 JWT?主要用来做什么?

JWT:Json Web Token,是基于 Json 的一个公开规范,这个规范允许我们使用 JWT 在用户和服务器之间传递安全可靠的信息,他的两大使用场景是:认证和数据交换

2. JWT 由几部分组成?分别是什么?

一个 JWT 实际上就是一个字符串,它由三部分组成:头部、载荷与签名

3. JWT 校验 token 时,怎么保证数据并没有被黑客拦截并篡改?

signature 中有私钥来进行签名,可以保证安全性

  1. 客户端登录成功后,服务器会给每一台主机分配一个唯一的 session_id,用来区分他们,除了存入服务器的缓存,数据库或者内存中,还会把这个 session_id 返回给相应的主机,

  2. 主机收到 session_id 后会存入 cookie 中,以后主机的每一次发送其他类型的请求的操作都会携带这个 session_id,

  3. 服务器会将客户端发来的这个 session_id 和服务端查到的 session_id 进行对比,如果匹配,则返回给对应主机所需要的资源,否则拒绝

缺点

  1. 因为服务器缓存 session_id,需要定期清理 session_id 表,

  2. 不能识别跨域请求,

  3. 在分布式 (即多台服务器) 的环境下,还得做 session 同步,一般不推荐,

5. JWT 的缺陷

  1. 不安全的加密算法 JWT 给开发者提供了很多的加密算法选择,其中就包括了已知的易受攻击的算法

  2. 在 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 区别以及防范

  1. XSS(跨站脚本攻击):

    • 原理:攻击者通过在网页中插入恶意脚本,使用户在浏览器中执行该脚本,从而获取用户的敏感信息或进行其他恶意操作。

    • 防御方式:对用户输入进行过滤和转义、使用 HTTP Only 属性禁止 JavaScript 读取 Cookie 值、输入时校验、浏览器与 Web 应用端采用相同的字符编码等。

  2. CSRF(跨站请求伪造):

    • 原理:攻击者利用用户已登录的身份,通过伪造请求发送到受信任的网站,使用户在不知情的情况下执行恶意操作。

    • 防御方式:使用随机化的 CSRF 令牌来验证请求的合法性。

  3. SSRF(服务器端请求伪造):

    • 原理:攻击者通过构造恶意请求,使服务器发起对内部资源的请求,从而获取敏感信息或攻击内部系统。

    • 防御方式:限制协议为 HTTPS、限制 URL 白名单、限制内网 IP 等。

Last updated