web安全

XSS 攻击

XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。其实在web前端方面,可以简单的理解为一种javascript代码注入。

使用eval 有什么问题?

需要注意的地方就是eval这个函数是可以将字符串重新转换成函数的并且执行函数的。eval() 函数:可计算某个字符串,并执行其中的的 JavaScript 代码。

如何防范 XSS 攻击?

  • 1.js 里不要用 eval

  • 2.不要用 innerHTML,尽量使用innerText

  • 3.把敏感信息都是存储在cookie中的(不要把用户机密信息放在网页中),想要阻止黑客通过js访问到cookie中的用户敏感信息。那么请使用cookie的HttpOnly属性,加上了这个属性的cookie字段,js是无法进行读写的。

  • 4.只允许用户输入我们期望的数据。例如:年龄的textbox中,只允许用户输入数字,而数字之外的字符都过滤掉

  • 5.对数据进行Html Encode 处理。一般会转(&、<、>、"、'、/)这6个字符;

CSRF 攻击

CSRF(Cross-site request forgery,中文为跨站请求伪造)是一种利用网站可信用户的权限去执行未授权的命令的一种恶意攻击。通过伪装可信用户的请求来利用信任该用户的网站

如何防范?

1.验证 HTTP Referer 字段
HTTP头中的Referer字段记录了该 HTTP 请求的来源地址。在通常情况下,访问一个安全受限页面的请求来自于同一个网站,而如果黑客要对其实施 CSRF 攻击,他一般只能在他自己的网站构造请求。因此,可以通过验证Referer值来防御CSRF 攻击。

2.在请求中添加token并验证
CSRF 攻击之所以能够成功,是因为黑客可以完全伪造用户的请求,该请求中所有的用户验证信息都是存在于cookie中,因此黑客可以在不知道这些验证信息的情况下直接利用用户自己的cookie 来通过安全验证。要抵御 CSRF,关键在于在请求中放入黑客所不能伪造的信息,并且该信息不存在于 cookie 之中。可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有token或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。这种方法要比检查 Referer 要安全一些,token 可以在用户登陆后产生并放于session之中,然后在每次请求时把token 从 session 中拿出,与请求中的 token 进行比对,但这种方法的难点在于如何把 token 以参数的形式加入请求。
对于 GET 请求,token 将附在请求地址之后,这样 URL 就变成 http://url?csrftoken=tokenvalue。不行,不安全,可能会被攻击者看到。
而对于 POST 请求来说,要在 form 的最后加上

这样就把token以参数的形式加入请求了。

3.在HTTP 头中自定义属性并验证
这种方法也是使用 token 并进行验证,和上一种方法不同的是,这里并不是把 token 以参数的形式置于 HTTP 请求之中,而是把它放到 HTTP 头中自定义的属性里。通过 XMLHttpRequest 这个类,可以一次性给所有该类请求加上 csrftoken 这个 HTTP 头属性,并把 token 值放入其中。这样解决了上种方法在请求中加入 token 的不便,同时,通过 XMLHttpRequest 请求的地址不会被记录到浏览器的地址栏,也不用担心 token 会透过 Referer 泄露到其他网站中去。

4.验证码。通常情况下,验证码能够很好的遏制CSRF攻击,但是很多情况下,出于用户体验考虑,验证码只能作为一种辅助手段,而不是最主要的解决方案。

Https 是如何保证安全的?

  • (1) 对称加密加密与解密使用的是同样的密钥,所以速度快,但由于需要将密钥在网络传输,所以安全性不高。

  • (2) 非对称加密使用一对密钥,公钥与私钥,所以安全性高,但加密与解密速度慢。

  • (3) 解决的办法是将对称加密的密钥使用非对称加密的公钥进行加密,然后发送出去,接收方使用私钥进行解密得到对称加密的密钥,然后双方可以使用对称加密来进行沟通。

  • (4)系统中会预先安装好证书,进行https通讯前会核对公钥是否在传输中被篡改。不信任一些不可靠证书。

具体流程:

  • 服务器 用RSA生成公钥和私钥

  • 把公钥放在证书里发送给客户端,私钥自己保存

  • 客户端首先向一个权威的服务器检查证书的合法性

  • 如果证书合法,客户端产生一段随机数,这个- 随机数就作为通信的密钥,我们称之为对称密钥

  • 用公钥加密这段随机数,然后发送到服务器,服务器用密钥解密获取对称密钥,然后,双方就已对称密钥进行加密解密通信了

你可能感兴趣的:(web安全)