常见的网络攻击及其防范手段

前端能遇到的网络攻击,基本只包含以下两类

  • XSS
  • CSRF

这篇文章就整理一下常见的网络攻击及其防范手段。

XSS(跨站脚本攻击)

是一种网站应用程式的安全漏洞攻击,是代码注入的一种。它允许恶意使用者将程式码注入到网页上,其他使用者在观看网页时就会受到影响。这类攻击通常包含了HTML以及使用者端脚本语言。

大概有以下三种攻击方式:

  • 反射型
    XSS通过修改HTML节点或者执行JS代码来攻击网站,例如通过URL获取参数的时候,将url改成一段攻击脚本

  • 存储型
    例如写了一篇包含攻击代码的文章,那么浏览文章的用户都会被攻击到

  • DOM-based
    以上两种都可算DOM-based类型

如何防御?

  • 转义输入输出的内容,对于引号、尖括号、斜杠进行转义
  • 对于显示富文本来说,可以通过白名单过滤或者黑名单过滤
  • CSP(内容安全策略),本质上也是建立白名单,规定了浏览器只能够执行特定来源的代码
    HTTP Header中的Content-Security-Policy可以开启CSP,值:
    • default-src ‘self’ 只允许加载本站资源
    • img-src https://* 只允许加载HTTPS协议图片
    • child-src ‘none’ 允许加载任何来源框架
    • 更多属性

CSRF(跨站点请求伪造)

如何攻击?

假设网站中有一个通过Get请求提交用户评论的接口,那么攻击者就可以在钓鱼网站中加入一个图片,图片的地址就是评论接口

1
<img src="http://www.xxx.com/xxx?comment='attack'" />

Post提交的用表单

1
2
3
<form action="http://www.xxx.com/xxx" id="CSRF" method="post">
<input name="comment" value="attack" type="hidden">
</form>

如何防御

  1. Get请求不对数据进行修改
  2. 不让第三方网站访问到用户Cookie
  3. 阻止第三方网站请求接口
  4. 请求时附带验证信息,比如验证码或者token

补充:

  • SameSite 该Cookie属性可以设置Cookie不随着跨域请求发送,但是兼容性不太好
  • 验证Referer 通过验证Referer来判断该请求是否为第三方网站发起的
  • Token 服务器下发一个随机Token,每次请求将Token带上,服务器验证是否有效

密码安全

密码必然不能铭文存储在数据库。并且也不建议只对密码单纯通过加密算法加密,因为存在彩虹表,可以反查出加密前的密码。因此,通常需要对密码加盐,然后进行几次不同加密算法的加密(加盐就是给原密码添加字符串,增加原密码长度)

加盐不能阻止别人盗号,但是能保证即使数据库泄露,也不会暴露用户的真实密码。但是攻击者可以通过暴力破解的方式破解密码。对于这种情况,通常使用验证码增加延时或者限制尝试次数。并且一旦用户输入了错误的密码,也不能直接提示密码错误,而应该提示账号或密码错误。

前端加密对安全防护意义不大,但是在遇到中间人攻击的情况下,可以避免名文密码被第三方获取

坚持原创技术分享,您的支持将鼓励我继续创作!