XSS全称是Cross Site Scripting(为了和CSS进行区分,就叫XSS)即跨站脚本。
XSS的重点不在于跨站点,而是在于脚本的执行 。
XSS 是一种在web应用中的计算机安全漏洞,是由于 Web 应用程序对用户的输入过滤不足而产生的,
它允许恶意web用户将代码植入到提供给其它用户使用的页面中 。
简单讲就是黑客将代码注入到页面中并且运行
反射型
一般通过修改URL参数的方式加入攻击代码, 诱导用户访问连接从而进行攻击
比如: 在地址栏里写一些转账之类的代码, 诱导用户点击, 但是现在绝大多数的浏览器会过滤到这些代码
场景: 此类 XSS 通常出现在网站的搜索栏、用户登录口等地方,常用来窃取客户端 Cookies 或进行钓鱼欺骗。
DOM-based 型
客户端如从 URL 中提取数据并在本地执行,如果用户在客户端输入的数据包含了恶意的 JavaScript 脚本,而这些脚本没有经过适当的过滤和消毒,那么应用程序就可能受到 DOM-based XSS 攻击。
场景: 需要特别注意以下的用户输入源 document.URL、 location.hash、 location.search、 document.referrer 等。
存储型
将代码注入你的服务器, 当你在某个时刻调用的时候会直接运行代码, 窃取到你的数据
比如: 将一段java后台语言的代码写在代码框里面, 在输入密码的时候, 代码发送到后台就直接运行了, 这样就会造成无法想象的后果
场景: 存储型 XSS 一般出现在网站留言、评论、博客日志等交互处,恶意脚本存储到客户端或者服务端的数据库中。
1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号
2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
3、盗窃企业重要的具有商业价值的资料
4、非法转账
5、强制发送电子邮件
6、网站挂马(网站篡改)
7、控制受害者机器向其它网站发起攻击
XSS防御的总体思路是:对输入(和URL参数)进行过滤,对输出进行编码。
设置一个白名单告诉浏览器, 哪些数据可以请求, 哪些数据不可以请求, 攻击者即使发现了漏洞, 也没法控制脚本.
方式1 HTTP 头信息的Content-Security-Policy的字段
Content-Security-Policy: script-src 'self'; object-src 'none';
style-src cdn.example.org third-party.org; child-src https:
方式2 网页的标签
告诉浏览器只有本域名的资源可以请求
启用后, 不符合CSF的外部资源就会被阻止加载
CSP: http://www.ruanyifeng.com/blog/2016/09/csp.html
不影响内容输出, 且不引起JS的执行
function xss(str){
return str.replace(/&/g, '&')
.replace(/, '<')
.replace(/>/g, '>')
.replace(/"/g, '&quto;')
.replace(/'/g, ''')
.replace(/`/g, '`')
.replace(/\//g,'/')
}
在服务器端对 Cookie 设置了HttpOnly 属性 , 防止客户端通过document.cookie
读取 cookie
不要使用 eval或者v-html来解析并运行不确定的数据或代码
1.输入(和URL参数)进行过滤
输入的过滤分为白名单和黑名单 ,黑名单的验证就是不能出现某些字符,白名单的验证就是只能出现某些字符。尽 量使用白名单 ,白名单和黑名单结合
2.对输出进行编码;
黑客搭建一个自己的服务器, 当用户在未知情况下登录了这个网站, 黑客就可以用你的身份发送请求给某些网站窃取资料
不让第三方平台请求
token验证
区别一:
CSRF:需要用户先登录网站A,获取 cookie。
XSS:不需要登录。
区别二:(原理的区别)
CSRF:是利用网站A本身的漏洞,去请求网站A的api。
XSS: 是向网站 A 注入 JS代码,然后执行 JS 里的代码,篡改网站A的内容。
黑客创建一个网站, 在网站中设置iframe标签( 会创建包含另外一个文档的内联框架(即行内框架)), 引入银行之类的网站, 然后再使用样式遮挡等操作诱导用户点击或者输入他想要的数据
解决: 后台通过设置X-FRAME-OPTIONS:DENY就可以禁止iframe标签