浏览器常见攻击与应对方案

209 阅读3分钟

XSS攻击

XSS攻击:Cross Site Scripting(跨站攻击),因为需要和css区分,简写为XSS。因为最初这种攻击是通过跨域实现的,但是现在html的注入方式趋于多样化,跨域这个特性已经不再明显了。

攻击原理:通过页面上存在漏洞的交互,向页面中注入可执行脚本,数据盗取、网站内容污染还是恶意软件分发。

反射型XSS攻击

模拟攻击demo

通过页面上用户可输入信息的入口(例如url, input等),将恶意代码输入,并且展示在页面上,从而完成攻击

在demo的输入框中,输入如下代码:

<img onerror="alert(11)" src="xx">

可以看到,以下三种方式,有两种可以成功执行alert方法

image.png

vue中的双括号是对内容处理过的,只会以纯字符的形式展示,而v-html和dom原生方法都可能存在漏洞。

存储型XSS攻击

通过存在漏洞的数据交互(例如发表评论),将恶意代码上传至后台服务器中,在这段内容展示在其他用户的页面上时进行攻击

基于dom的xss攻击

通过在传输过程中劫持并修改dom内容,从而直接将恶意代码注入页面(可以通过wifi劫持,或是使用本地恶意软件等)

应对方式

前端:

  • 直接识别并禁用特殊字符
  • 将<>等代码相关字符使用&lt,&gt等html特殊字符进行转码
  • vue中可以使用{{}}方式展示内容,使用v-html需要添加特殊的预防逻辑
  • 使用CSP策略

后端:

  • 后端也可以对<>等特殊字符进行转码,或者直接过滤掉,之后存入服务器中
  • 写入cookie时采用httponly参数,这样恶意脚本无法获取用户的重要cookie内容

CSRF攻击

CSRF攻击:Cross Site Request Forgery(跨站请求伪造) 攻击者通过用户的登录状态,通过第三方站点进行攻击

举个例子: 现在有正常站点serve.com,和用来攻击的hacker.com站点。hacker站点在以下情况都满足时可以对serve进行CSRF攻击:

  • 用户已经在serve正常登录,并存入cookie
  • hacker站点掌握了serve的关键接口信息(例如,获取用户信息接口/userInfo)
  • 用户进入hacker站点,并且在hacker页面踩雷调用了/userInfo接口

这时候hacker站点就可以带着用户的cookie对serve站点进行访问,从而完成用户登录。

image.png (图片来自zhuanlan.zhihu.com/p/366715378…

应对方式

  • cookie的sameSite参数(chrome的高版本sameSite已经默认是Lax) image.png
  • 后端通过请求中的origin和refer字段进行判断,过滤来自外名单外的请求来源
  • serve站点生成特定token(不存放在cookie中),并且请求时携带,这样hacker站点发起的请求无法通过token验证

SQL注入

SQL注入:攻击者通过可存储时页面交互(例如用户注册表单),将sql代码片段存入数据库中,从而在影响后端的sql执行

MDN上有详细的SQL注入实现案例

防御方式

  • 后端需要对数据进行字符串转义,这块应该都有成熟的库进行处理了