xss定义
Cross Site Scripting的缩写本来是CSS,但是这样就跟Cascading Style Sheets的缩写混淆了,所以使用XSS,使用字母X更库,而且更贴切的反应这是一种恶意攻击技术,中文名称是“跨站脚本攻击”。
原理概要:某个恶意用户发现一个网站存在XSS漏洞,该用户向此网站上传内容时,例如,提交表单,在表单中填写的不是正常的内容,而是填写恶意的Javascript代码或者能够造成网站页面中的HTML标签被恶意闭合的内容,这样其他用户浏览该页面时,嵌入其中的Javascript代码被执行或者由于恶意标签闭合造成页面逻辑的改变,都可以被利用达到攻击的目的。
造成的危害
对于那些半年没有更新的小企业网站来说,发生XSS漏洞几乎没有什么用
但是在各类的社交平台,邮件系统,开源流行的Web应用,BBS,微博等场景中,造成的杀伤力却十分强大。
劫持用户cookie是最常见的跨站攻击形式,通过在网页中写入并执行脚本执行文件(多数情况下是JavaScript脚本代码),劫持用户浏览器,将用户当前使用的sessionID信息发送至攻击者控制的网站或服务器中。
又可以称为“框架钓鱼”。利用JS脚本的基本功能之一:操作网页中的DOM树结构和内容,在网页中通过JS脚本,生成虚假的页面,欺骗用户执行操作,而用户所有的输入内容都会被发送到攻击者的服务器上。
挂马(水坑攻击)
有局限性的键盘记录
......
实践注入xss
假如我有一个显示用户名的区域通过ajax获取数据然后动态innerHTML插入到一个div里显示。代码如下(伪代码)
<div id="myDiv"></div>
<script>
// 假如str就是我们从远程服务获取的用户名信息
var str = "<div></div>";
str += "<img src='empty.gif' onerror='alert(\"hello world\"); this.parentNode.removeChild(this);"/>";
document.getElementById('myDiv').innerHTML = str;
</script>
这时图片不存在就会执行oneror事件,弹出“hello world”;如果他执行一个请求将你的cookie发给恶意网站,那你的登陆信息就全丢了。当然可以干任何他想做的事了。
以上只是举了一种xss的攻击方式。
预防xss
将录入的恶意标签进行转码再存储,主要在后端录入的时候做。前端做意义不大。 当然前端可以在展示数据的时候进行标签转码,可以做到双保险。
以下是一个工具支持前端和nodejs使用。https://jsxss.com/zh/index.html
其他后端语言如java,php都有对应的函数类使用。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。