Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

安全 #52

Open
into-piece opened this issue May 18, 2021 · 7 comments
Open

安全 #52

into-piece opened this issue May 18, 2021 · 7 comments

Comments

@into-piece
Copy link
Owner

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

@into-piece
Copy link
Owner Author

xss

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

@into-piece
Copy link
Owner Author

CSRF

  • 同源检测,直接禁止外域(受信域可以开白名单)对我们发起请求
  • CSRF Token,就把Token以参数的形式加入请求了,提交给服务器的时候,服务器需要判断Token的有效性
  • Samesite Cookie属性,Samesite=Strict只允许同源网站提交请求携带cookie

@into-piece
Copy link
Owner Author

网络传输安全

中间人攻击

image

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

@into-piece
Copy link
Owner Author

into-piece commented May 19, 2021

  • 接口加签
  • 接口加密
  • 图片验证码
  • 代码加密混淆

@into-piece
Copy link
Owner Author

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

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

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

@into-piece
Copy link
Owner Author

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant