Cross-Site Scripting(跨站脚本攻击)简称 XSS,是一种代码注入攻击。攻击者经过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如 Cookie、SessionID 等,进而危害数据安全。
为了和 CSS 区分,这里把攻击的第一个字母改为了 X,因而叫作 XSS。
XSS 的本质是:恶意代码未通过滤,与网站正常的代码混在一块儿;浏览器没法分辨哪些脚本是可信的,致使恶意脚本被执行。前端
当浏览器请求 http://xxx/search?keyword="><script>alert('XSS');</script>
时,服务端会解析出请求参数 keyword
,获得 "><script>alert('XSS');</script>
,拼接到 HTML 中返回给浏览器。造成了以下的 HTML:浏览器
<div> 您搜索的关键词是:"><script>sendToMe(document.cookie);</script> </div>
这样浏览器就会执行咱们注入的恶意代码,咱们诱导他人访问咱们构造的连接,就会把他人访问页面的部分信息发送给个人服务器安全
好比一个网站的文章能够发表评论。
你登陆后获取了cookie而后评论。
而后输入评论内容: 2222<script>alert(XSS)</script>
恶意脚本未经转换,存储到了后台。任何用户访问此页面,都会执行恶意脚本。
致使每一个用户在看这篇文章的时候就都弹出XSS弹框服务器
客户端的脚本程序能够动态地检查和修改页面内容,而不依赖于服务器端的数据。可能引发dom型xss的:使用innerHTML, documen.write属性...
DOM 型 XSS 跟前两种 XSS 的区别:DOM 型 XSS 攻击中,取出和执行恶意代码由浏览器端完成,属于前端 JavaScript 自身的安全漏洞,而其余两种 XSS 都属于服务端的安全漏洞。cookie
<input type="text" id="input"> <button id="btn">Submit</button> <div id="div"></div> <script> const input = document.getElementById('input'); const btn = document.getElementById('btn'); const div = document.getElementById('div'); let val; input.addEventListener('change', (e) => { val = e.target.value; }, false); btn.addEventListener('click', () => { div.innerHTML = `<a href=${val}>testLink</a>` }, false); </script>
上面若是某个网站有这样的代码咱们能够直接在输入框输入onclick=alert(/xss/)
提交以后,页面代码就变成了:<a href onlick="alert(/xss/)">testLink</a>
dom