Web安全常识总结

Posted by mieruko on 2017-06-20

前言

我所接触到的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建立连接的过程(摘自阮一峰博客)

  • 客户端给出协议的版本号、一个客户端生成的随机数和客户端支持的加密算法;
  • 服务端在客户端给出的加密算法列表中选出一种,并给出数字证书和一个服务端生成的随机数;
  • 客户端确认数字证书的有效性,然后生成一个新的随机数,并使用数字证书中的公钥加密这个随机数;
  • 服务端使用私钥解密,获取客户端发来的随机数;
  • 客户端和服务端根据约定的加密方法,使用之前的三个随机数,生成对话密钥,这个密钥会用来加密接下来的整个通信过程