Web 前后端漏洞分析与防御技巧--笔记

相关工具

nodemon

代替 node,启动的服务,如果修改后会自动编译启动,无需每次手动启动。

jspm

前端包管理工具,npm 是 node 的包管理工具,服务端的。

XSS

全称是:Cross Site Scripting,(跨站脚本攻击),为什么不叫 CSS,因为 CSS 是样式的缩写,cross在英文中通常也被缩写为X,所以这里直接把 cross 缩写成 X。
简单理解就是:通常情况下,你希望你网站中运行的逻辑都是来自本站,是你自己的东西才能在你网站中运行。但是如果运行了不是本站的脚本就发生了跨站脚本攻击。这里是脚本,不是请求。
//通常发给你服务器的请求是来自你自己的网站,但是 xss 就是发给你服务的请求,不是从你自己的网站,请求是从其他的网站发过来的。

url 参数注入

  1. 如果 url 中的参数在网页中直接当做变量来显示,则可以被脚本攻击。如果参数的值中包含脚本,则在显示变量值时,传入的脚本则会被执行,引起 XSS。
    如下代码:
1
2
3
4
http://test.com?name=zhangsan<script>alert(1)</script>

//下面使用hmtl模板或jsx语法为例
<div>访问的本站是{name}</div>

上述代码则会运行传入的脚本。

  1. 还可以直接链接到其他网站的 js 文件
1
http://test.com?name=zhangsan<script src='http://code.jquery.com/jquery-2.1.1.min.js'></script>

上面的请求发出后,参数中的 jquery 链接文件就会被下载并执行。可以在网络请求中看到下载的链接。
如果上面的链接换成了恶意写好的代码,比如获取你的用户名和密码,发送违规请求等,那危害就大了。

脚本攻击能干什么

  1. 获取页面数据
  2. 获取 Cookies
  3. 劫持前端逻辑
  4. 发送请求
  5. 偷取网站任意数据
  6. 偷取用户资料
  7. 偷取用户名和登录状态
  8. 欺骗用户

分类

  • 反射类:url 参数直接注入
  • 存储类:存储到 DB 后读取时注入

存储类

反射类上面已经举例说明了,下面看看存储类。
比如我们在评论里面写入脚本,评论被显示时脚本就会被执行。

XSS 注入点

  1. HTML 节点,比如上面传的参数直接在页面中显示和在评论区中输入脚本
  2. HMTL 属性,比如有些 html 的属性是动态输入的。比如根据输入的地址显示对应的图片。
1
2
3
<img src="#{imgPath}" />
如果输入的是`1" onerror="alert(1)"`,则会变成下面的内容
<img src="1" onerror="alert(1)" />

当然 src 还可以是一个 js 文件链接。

  1. JavaScript 代码,比如上面的评论中直接写脚本。
  2. 富文本
    富文本就是在文本框中输入脚本或恶意链接。

XSS 防御

  1. 浏览器自带防御
    服务端在返回时,可以设置请求头部:X-XSS-Protection,默认是开启的,开启后,上面 url 中注入的脚本就会被认出,请求就会被拦截。
    这个只能防御有限,只能防止反射性的注入。 如果传的参数没有带