xss注入实践和防范

xss定义

Cross Site Scripting的缩写原本是CSS,可是这样就跟Cascading Style Sheets的缩写混淆了,因此使用XSS,使用字母X更库,并且更贴切的反应这是一种恶意攻击技术,中文名称是“跨站脚本攻击”。php

原理概要:某个恶意用户发现一个网站存在XSS漏洞,该用户向此网站上传内容时,例如,提交表单,在表单中填写的不是正常的内容,而是填写恶意的Javascript代码或者可以形成网站页面中的HTML标签被恶意闭合的内容,这样其余用户浏览该页面时,嵌入其中的Javascript代码被执行或者因为恶意标签闭合形成页面逻辑的改变,均可以被利用达到攻击的目的。html

形成的危害

对于那些半年没有更新的小企业网站来讲,发生XSS漏洞几乎没有什么用前端

可是在各种的社交平台,邮件系统,开源流行的Web应用,BBS,微博等场景中,形成的杀伤力却十分强大。java

劫持用户cookie是最多见的跨站攻击形式,经过在网页中写入并执行脚本执行文件(多数状况下是JavaScript脚本代码),劫持用户浏览器,将用户当前使用的sessionID信息发送至攻击者控制的网站或服务器中。node

又能够称为“框架钓鱼”。利用JS脚本的基本功能之一:操做网页中的DOM树结构和内容,在网页中经过JS脚本,生成虚假的页面,欺骗用户执行操做,而用户全部的输入内容都会被发送到攻击者的服务器上。git

挂马(水坑攻击)github

有局限性的键盘记录
......ajax

实践注入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都有对应的函数类使用。


博客地址https://github.com/kokokele/k...

相关文章
相关标签/搜索