into-piece / Step-By-Step

每天一题向前端架构师前进
4 stars 1 forks source link

安全 #52

Open into-piece opened 3 years ago

into-piece commented 3 years ago
  1. 用户输入保存到数据库的数据,需要对其进行检查,对<>等特殊符号进行过滤或转义,防止xss攻击
into-piece commented 3 years ago

https://mp.weixin.qq.com/s/Qm_YI9pxfWQJpSLwbSFKbw

into-piece commented 3 years ago

xss

永远不要相信用户的输入,对用户输入的特殊字符串进行转译,针对用户的输入设置标签白名单 cookie设置HttpOnly,配合token或验证码防范 设置CSP安全策略-可以通过两种方式设置CSP,一种是meta标签,一种是HTTP响应头Content-Security-Policy

into-piece commented 3 years ago

CSRF

into-piece commented 3 years ago

网络传输安全

中间人攻击

image

防范 对于个人来说防止自己被中间人攻击最基本的就是不要乱连不安全的网络 公司APP来说应该配置禁止被抓包 APP和浏览器都应该严格校验证书,不使用不安全的APP和浏览器

into-piece commented 3 years ago
into-piece commented 3 years ago

我们知道CA机构有自己的根公钥和根私钥。

在证书颁发之前,机构会用根私钥将这个证书内容加密得到一个签名,这个签名只能用对应的根公钥去解密。

在客户端(浏览器)收到服务端发过来的证书以后,我们首先从浏览器中拿到机构的根公钥,用这个根公钥去解析证书的签名得到一个哈希值H1,这个H1代表证书的原始内容,假设这个证书上的签名是不法分子伪造的,但是伪造的签名不可能是根私钥加密生成的(因为根私钥是CA机构私有),所以根公钥也不可能去解密任何第三方生成的签名(加密内容只能由对应的公钥私钥解析)。然后我们再用同样的哈希算法对收证书内容进行计算得到哈希值H2,通过对比H1和H2是否相等就知道证书有没有被篡改过了。 image

into-piece commented 3 years ago

HTTPS 握手过程中,客户端如何验证证书的合法性

https://github.com/Advanced-Frontend/Daily-Interview-Question/issues/74 (1)首先浏览器读取证书中的证书所有者、有效期等信息进行校验,校验证书的网站域名是否与证书颁发的域名一致,校验证书是否在有效期内 (2)浏览器开始查找操作系统中已内置的受信任的证书发布机构CA,与服务器发来的证书中的颁发者CA比对,用于校验证书是否为合法机构颁发 (3)如果找不到,浏览器就会报错,说明服务器发来的证书是不可信任的。 (4)如果找到,那么浏览器就会从操作系统中取出颁发者CA 的公钥(多数浏览器开发商发布 版本时,会事先在内部植入常用认证机关的公开密钥),然后对服务器发来的证书里面的签名进行解密 (5)浏览器使用相同的hash算法计算出服务器发来的证书的hash值,将这个计算的hash值与证书中签名做对比 (6)对比结果一致,则证明服务器发来的证书合法,没有被冒充