xss攻击

XSS攻击

XSS全称是Cross Site Scripting(为了和CSS进行区分,就叫XSS)即跨站脚本。

XSS的重点不在于跨站点,而是在于脚本的执行

XSS 是一种在web应用中的计算机安全漏洞,是由于 Web 应用程序对用户的输入过滤不足而产生的,

它允许恶意web用户将代码植入到提供给其它用户使用的页面中 。

简单讲就是黑客将代码注入到页面中并且运行

XSS分类:

非持久型(反射型/DOM-based 型 )

  • 反射型

    一般通过修改URL参数的方式加入攻击代码, 诱导用户访问连接从而进行攻击

    比如: 在地址栏里写一些转账之类的代码, 诱导用户点击, 但是现在绝大多数的浏览器会过滤到这些代码
    ​ 场景: 此类 XSS 通常出现在网站的搜索栏、用户登录口等地方,常用来窃取客户端 Cookies 或进行钓鱼欺骗。

  • DOM-based 型

    客户端如从 URL 中提取数据并在本地执行,如果用户在客户端输入的数据包含了恶意的 JavaScript 脚本,而这些脚本没有经过适当的过滤和消毒,那么应用程序就可能受到 DOM-based XSS 攻击。

    场景: 需要特别注意以下的用户输入源 document.URL、 location.hash、 location.search、 document.referrer 等。

持久型(存储型)

  • 存储型

    将代码注入你的服务器, 当你在某个时刻调用的时候会直接运行代码, 窃取到你的数据

    比如: 将一段java后台语言的代码写在代码框里面, 在输入密码的时候, 代码发送到后台就直接运行了, 这样就会造成无法想象的后果

    场景: 存储型 XSS 一般出现在网站留言、评论、博客日志等交互处,恶意脚本存储到客户端或者服务端的数据库中。

XSS攻击的危害:

1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号

2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力

3、盗窃企业重要的具有商业价值的资料

4、非法转账

5、强制发送电子邮件

6、网站挂马(网站篡改)

7、控制受害者机器向其它网站发起攻击

XSS防御技术

XSS防御的总体思路是:对输入(和URL参数)进行过滤,对输出进行编码

1.对输入进行过滤 : CSP(网页安全政策)

​ 设置一个白名单告诉浏览器, 哪些数据可以请求, 哪些数据不可以请求, 攻击者即使发现了漏洞, 也没法控制脚本.

方式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

2.对输出进行编码 : 转义字符

不影响内容输出, 且不引起JS的执行

function xss(str){
           return str.replace(/&/g, '&')
                     .replace(/, '<')
                     .replace(/>/g, '>')
                     .replace(/"/g, '&quto;')
                     .replace(/'/g, ''')
                     .replace(/`/g, '`')
                     .replace(/\//g,'/')
}
  1. 在服务器端对 Cookie 设置了HttpOnly 属性 , 防止客户端通过document.cookie读取 cookie

  2. 不要使用 eval或者v-html来解析并运行不确定的数据或代码

XSS攻击防御方法总结:

1.输入(和URL参数)进行过滤

输入的过滤分为白名单和黑名单 ,黑名单的验证就是不能出现某些字符,白名单的验证就是只能出现某些字符。尽 量使用白名单 ,白名单和黑名单结合

2.对输出进行编码;

CSRF ( 跨站请求伪造)

黑客搭建一个自己的服务器, 当用户在未知情况下登录了这个网站, 黑客就可以用你的身份发送请求给某些网站窃取资料

防御手段

​ 不让第三方平台请求

​ token验证

CSRF 和 XSS 的区别

区别一:

​ CSRF:需要用户先登录网站A,获取 cookie。

​ XSS:不需要登录。

区别二:(原理的区别)

​ CSRF:是利用网站A本身的漏洞,去请求网站A的api。

​ XSS: 是向网站 A 注入 JS代码,然后执行 JS 里的代码,篡改网站A的内容。

事件劫持

黑客创建一个网站, 在网站中设置iframe标签( 会创建包含另外一个文档的内联框架(即行内框架)), 引入银行之类的网站, 然后再使用样式遮挡等操作诱导用户点击或者输入他想要的数据

解决: 后台通过设置X-FRAME-OPTIONS:DENY就可以禁止iframe标签

你可能感兴趣的:(web安全)