相关工具
nodemon
代替 node,启动的服务,如果修改后会自动编译启动,无需每次手动启动。
jspm
前端包管理工具,npm 是 node 的包管理工具,服务端的。
XSS
全称是:Cross Site Scripting
,(跨站脚本攻击),为什么不叫 CSS,因为 CSS 是样式的缩写,cross
在英文中通常也被缩写为X
,所以这里直接把 cross 缩写成 X。
简单理解就是:通常情况下,你希望你网站中运行的逻辑都是来自本站,是你自己的东西才能在你网站中运行。但是如果运行了不是本站的脚本就发生了跨站脚本攻击。这里是脚本
,不是请求。
//通常发给你服务器的请求是来自你自己的网站,但是 xss 就是发给你服务的请求,不是从你自己的网站,请求是从其他的网站发过来的。
url 参数注入
- 如果 url 中的参数在网页中直接当做变量来显示,则可以被脚本攻击。如果参数的值中包含脚本,则在显示变量值时,传入的脚本则会被执行,引起 XSS。
如下代码:
1 | http://test.com?name=zhangsan<script>alert(1)</script> |
上述代码则会运行传入的脚本。
- 还可以直接链接到其他网站的 js 文件
1 | http://test.com?name=zhangsan<script src='http://code.jquery.com/jquery-2.1.1.min.js'></script> |
上面的请求发出后,参数中的 jquery 链接文件就会被下载并执行。可以在网络请求中看到下载的链接。
如果上面的链接换成了恶意写好的代码,比如获取你的用户名和密码,发送违规请求等,那危害就大了。
脚本攻击能干什么
- 获取页面数据
- 获取 Cookies
- 劫持前端逻辑
- 发送请求
- 偷取网站任意数据
- 偷取用户资料
- 偷取用户名和登录状态
- 欺骗用户
分类
- 反射类:url 参数直接注入
- 存储类:存储到 DB 后读取时注入
存储类
反射类上面已经举例说明了,下面看看存储类。
比如我们在评论里面写入脚本,评论被显示时脚本就会被执行。
XSS 注入点
- HTML 节点,比如上面传的参数直接在页面中显示和在评论区中输入脚本
- HMTL 属性,比如有些 html 的属性是动态输入的。比如根据输入的地址显示对应的图片。
1 | <img src="#{imgPath}" /> |
当然 src 还可以是一个 js 文件链接。
- JavaScript 代码,比如上面的评论中直接写脚本。
- 富文本
富文本就是在文本框中输入脚本或恶意链接。
XSS 防御
浏览器自带防御
服务端在返回时,可以设置请求头部:X-XSS-Protection
,默认是开启的,开启后,上面 url 中注入的脚本就会被认出,请求就会被拦截。
这个只能防御有限,只能防止反射性的注入。 如果传的参数没有带