前言
我所接触到的Web安全话题当下看来就是CSRF,XSS和HTTPS。
CSRF-跨站请求伪造
CSRF 顾名思义,是伪造请求,冒充用户在站内的正常操作。
要完成一次CSRF攻击,受害者必须依次完成两个步骤。
1.登录受新人的网站A,并在本地生成Cookie。
2.在不登出A的情况下,访问危险网站B。
CSRF的最终解决方案是使用CSRF-TOKEN。
具体的做法是:
服务器发送给客户端一个token。
客户端提交的表单中带着这个token。
如果这个token不合法,那么服务器拒绝这个请求。
XSS-跨站请求攻击
XSS是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言。
XSS的解决方案:
- 常见的解决方案是将用户提供的内容进行转义,许多语言都有提供对html的过滤
- 针对cookie的一个预防方案是在响应头的set-cookie字段设置一个http-only,如此我们便无法通过脚本去获取和修改cookie了。
- csp。在meta标签里设置content-security-policy,设置指定的域名,只有这个域名下的资源才去加载。有了这个标签,浏览器就不再识别非指定源的脚本了。
HTTPS
HTTPS 协议(HyperText Transfer Protocol over Secure Socket Layer):可以理解为HTTP+SSL/TLS, 即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL,用于安全的 HTTP 数据传输。
对称加密
加密和解密都是使用的同一个密钥。
非对称加密
加密使用的密钥和解密使用的密钥是不相同的,分别称为:公钥、私钥
公钥加密的只有私钥才可以解密,私钥加密的只有公钥才可以解密。
HTTPS将对称加密和非对称加密做了结合
SSL建立连接的过程(摘自阮一峰博客)
- 客户端给出协议的版本号、一个客户端生成的随机数和客户端支持的加密算法;
- 服务端在客户端给出的加密算法列表中选出一种,并给出数字证书和一个服务端生成的随机数;
- 客户端确认数字证书的有效性,然后生成一个新的随机数,并使用数字证书中的公钥加密这个随机数;
- 服务端使用私钥解密,获取客户端发来的随机数;
- 客户端和服务端根据约定的加密方法,使用之前的三个随机数,生成对话密钥,这个密钥会用来加密接下来的整个通信过程