XSS(Cross Site Scripting)
XSS攻击全称跨站脚本攻击,之所以首字母是X,是为了区别于层叠样式表CSS
使用cookie,localStorage,sessionStorage时要注意是否有代码存在XSS注入的风险,攻击者在有XSS缺陷的页面会窃取用户的对应信息
XSS注入的方法
XSS注入实际上就是通过页面设计时的缺陷,利用浏览器对于某处代码的解析,让浏览器去执行恶意代码
- 在 HTML 中内嵌的文本中,恶意内容以 script 标签形成注入。
- 在内联的 JavaScript 中,拼接的数据突破了原本的限制(字符串,变量,方法名等)。
- 在标签属性中,恶意内容包含引号,从而突破属性值的限制,注入其他属性或者标签。
- 在标签的 href、src 等属性中,包含 javascript: 等可执行代码。
- 在 onload、onerror、onclick 等事件中,注入不受控制代码。
- 在 style 属性和标签中,包含类似 background-image:url(“javascript:…”); 的代码(新版本浏览器已经可以防范)。
- 在 style 属性和标签中,包含类似 expression(…) 的 CSS 表达式代码(新版本浏览器已经可以防范)。
攻击类型
一、 反射型 (非持久型)
是指发生请求时,XSS代码出现在请求URL中,作为参数提交到服务器,服务器解析并响应。响应结果中包含XSS代码,最后浏览器解析并执行。
举个例子
`${
url}?name=<script>alert(111)</script>`
攻击步骤
- 攻击者构造出特殊的 URL,其中包含恶意代码。
- 用户打开带有恶意代码的 URL 时,网站服务端将恶意代码从 URL 中取出,拼接在 HTML 中返回给浏览器。
- 用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行。
- 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。
反射型 XSS 跟存储型 XSS 的区别是:存储型 XSS 的恶意代码存在数据库里,反射型 XSS 的恶意代码存在 URL 里。
反射型 XSS 漏洞常见于通过 URL 传递参数的功能,如网站搜索、跳转等。
举个例子,当我们在test.html中有一个搜索的url,test.html?q=xxx,这里的xxx就是搜索的内容,而我们在自己的攻击网站hacker.html中,添加一个跳转