一、什么是XSS?

跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的, 还有另外一种产常见的就是CSRF(后面讲到)。

主要危害:

盗取各类用户帐号,如用户网银帐号、各类管理员帐号;

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

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

强制发送电子邮件;

控制受害者机器向其他网站发起攻击等;

主要分类:

     反射型:发出请求时,XSS代码出现在URL中,作为输入 提交到服务器端,服务器端解析响应之后,XSS代码随着响应内容一起传回给浏览器,最后浏览器解析执行XSS代码

     存储型:存储型XSS和反射型XSS的差别在于,提交的代码会存储在服务器中(例如数据库,内存,文件系统等),下次请求页面是不用再提交XSS代码。

特点:

  1.耗时间
  2.有一定几率不成功
  3.没有响应的软件自动攻击
  4.需要有一定的语言基础
  5.这是一种被动的攻击手法
     几乎所有的网站都存在Xss 谷歌,百度,QQ都有,如果不重视,能能会产生意想不到的严重后果,所用了解xss原理并知道防范措施是很有必要的。

二、反射型攻击演示

  1、启动Express应用

2、获取用户输入的url中的xss并显示在页面上(X-XSS_Protection:0 是关闭浏览器的XSS防护机制);

3、当用户在url中输入xss=<img src='null' onerror="alert(1)">

再或者输入:xss=<iframe src="//baidu.com/t.html"><iframe>时候;iframe是支持跨域的,这样破破坏者就可知在iframe里面为所欲为了,一般那些网站中植入的可恶的小广告就是用这种方式;还有更为可怕的就是破坏者在在iframe里面继续埋下其他攻击性的脚本,诱导用户去触发,进而引发连环的攻击。

再或者用户输入:xss=<img src='null' onmouseover="alert(1)">,页面都是可以执行脚本的。

其他常见的xss语句

<font color="#FF0000">Hello</font>

<input type='text' name='shuchu' value=''><font color="#FF0000">Hello</font>' />

<input type='text' name='shuchu' value='' />
<input type='text' name='shuchu' value=''Onmousemove="alert('xss')" '' /> '><script>alert("xss")</script>
<script>alert("xss")</script> <img src='1' Onmousemove="alert('xss')" ''/>

  

其实我们可在在一些xss平台上进行模拟实现,可以看到xss效果;具体可以看看。

xss平台

http://xsspt.com/index.php

为什么呢?

  原因就是xss代码随着url发送给了服务器,假设服务器没有做任何措施,xss随着响应的代码一同返回到客户端,客户端当成一般的脚本语言给解析了。试想,我们测试只是写了简单的js语句?万一破坏者写的是获取用户的额cookie等语句,活着是更加复杂的语句,这样问题不是大了么?

三、储蓄攻击

前面件讲到,存储型XSS和反射型XSS的差别在于,提交的代码会存储在服务器中(例如数据库,内存,文件系统等),下次请求页面是不用再提交XSS代码,这种攻击一般存在类似于评论区等功能模块中,比如用户提交一段带有xss语句的评论,当评论被用户获时候,如果没有对xss采取任何防范措施,这样有破坏性的xss就有可能被客户端执行了。对于这部分的演示,稍后我们通过一个例子来展示。

四、xss的防范措施

  前面对攻击进行了演示,大家可以看出,因为没有对用户输入的内容进行一定的措施,从而使得破坏者找到注入点进而实施了xss的注入。那我们应该从哪方面入手呢?

《白帽子讲WEB安全》中有讲到 “永远不要相信用户的输入!”  ,总得要做点什么? 这样我们可用从三点入手;编码、过滤、校正。

编码:

  对用户输入的数据进行HTML Entity编码,说白了就是不能保持用户的原样输入,如字符编码成&amp;  >字符编码成&gt; 不断开的空格编码成&nbsp;等。

过滤:

  移除用户上传的DOM属性,如onerror、onmouseover等;

  移除用户上传的style、script、iframe节点等;

校正:

  避免直接对HTML Entity解码;

  使用 DOM Parse转换,校正不匹配的DOM标签;

若是用到cookie,设置http-only,避免客户端的篡改,不过这样就是去js操作cookie的能力了。

五、实战例子

  通过构建express服务建立一个评论功能,演示xss的攻击个防御;demo中借用第三方库进行解码和配对校验;

  demo地址:https://github.com/leaf930814/xss

六、CSRF

  跨站点请求伪造(Cross-SiteRequest Forgeries, CSRF),是指攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某些状态更新,属于被动攻击;

有如下危害:

  1、利用已通过认证的用户权限更新设定信息;

  2、利用已通过认证的用户权限购买商品,虚拟货币转账;

  3、利用已通过认证的用户权限在留言板发表言论;

攻击原理:

第一步:验证用户访问存在CSRF漏洞的网站A,网站A会给用户返回cookie,以便后面可以免登陆;

第二步:此时用户在同一浏览器打开一个有而已攻击代码的网站B,网站B返回一些攻击的代码,这些代码要求请求A网站;

第三步:浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据该验证用户的cookie信息以及权限处理该请求;

防御CSRF

  1、验证 HTTP Referer 字段;

  2、在请求地址中添加 token 并验证;

  3、使用手机或邮件验证码;

  4、重要数据采用post请求,填写表单验证,但是破坏者可能会伪造form提交。

利用Express模拟web安全之---xss的攻与防的更多相关文章

  1. 利用 Apache Synapse 模拟 Web 服务

    Apache Synapse 是一个简单.轻量级的高性能企业服务总线 (ESB),它是在 Apache Software Foundation 的 Apache License Version 2.0 ...

  2. 利用phantomjs模拟QQ自动登录

    之前为了抓取兴趣部落里的数据,研究了下QQ自动登录. 当时搜索了一番,发现大部分方法都已经失效了,于是准备自己开搞. 第一个想到的就是参考网上已有方案的做法,梳理登陆js的实现,通过其他语言重写.考虑 ...

  3. WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案(转)

    对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,希望大家多多提意见. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避 ...

  4. WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案

    对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,希望大家多多提意见. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避 ...

  5. Web安全之XSS Platform搭建及使用实践

    Web安全之XSS Platform搭建及使用实践 一.背景 XSS Platform 是一个非常经典的XSS渗透测试管理系统,原作者在2011年所开发,由于后来长时间没有人维护,导致目前在PHP7环 ...

  6. web安全之XSS注入

    之前在做项目的时候有遇到一些安全问题,XSS注入就是其中之一 那么,什么是XSS注入呢? XSS又叫CSS (Cross Site Script) ,跨站脚本攻击.它指的是恶意攻击者往Web页面里插入 ...

  7. vue—你必须知道的 js数据类型 前端学习 CSS 居中 事件委托和this 让js调试更简单—console AMD && CMD 模式识别课程笔记(一) web攻击 web安全之XSS JSONP && CORS css 定位 react小结

    vue—你必须知道的   目录 更多总结 猛戳这里 属性与方法 语法 计算属性 特殊属性 vue 样式绑定 vue事件处理器 表单控件绑定 父子组件通信 过渡效果 vue经验总结 javascript ...

  8. 利用AppMetrics对Web进行监控教程

    利用AppMetrics对Web进行监控教程 一.基础准备 1. 安装依赖 这里可以通过nuget或使用命令行进行安装,具体需要安装的类库如下(注意版本): Install-Package App.M ...

  9. 干货 | 利用京东云Web应用防火墙实现Web入侵防护

    摘要 本指南描述如何利用京东云Web应用防火墙(简称WAF),对一个简单的网站(无论运行在京东云.其它公有云或者IDC)进行Web完全防护的全过程.该指南包括如下内容: 准备环境 在京东云上准备Web ...

随机推荐

  1. apollo1.7.1初探(一)安装apollo、创建并启动broker

    Apache Apollo是一个代理服务器,是在ActiveMQ基础上发展而来的,支持STOMP, AMQP, MQTT, Openwire, SSL, and WebSockets 等多种协议. A ...

  2. Spring Security 入门(1-6-1)Spring Security - 配置文件解析和访问请求处理

    1.在pom.xml中添加maven坐标 <dependency> <groupId>org.springframework.security</groupId> ...

  3. Opencv出现“_pFirstBlock == pHead”错误的解决方法

    先说结论: opencv链接库使用错误. 1,确认VS工程属性中,opencv的链接库路径和版本正确. VS2013应该使用vc12目录,VS2012对应vc11目录.debug版和release版要 ...

  4. spring cloud zipkin sleuth与spring boot aop结合后,启动慢

    问题描述: 引入了spring cloud的监控starter,间接引入jooq. 又引入了 spring-boot-starter-web,所以间接引入aop. 参考下面资料后:https://gi ...

  5. Docker Win 10 安装

    最近了解了一下Docker,不看不知道,一了解就完全被它给吸引住了.以往要装个环境,除了要准备一个Linux系统,然后在安装各种版本的类库,再安装我们需要各种应用服务(如Redis,Ngix,Mong ...

  6. sys.exc_info()可以捕获到任意异常

    import sys try: a = 3 assert a > 4 except: exc = sys.exc_info()#返回异常的元祖 print (exc)

  7. Python进阶_mysql(1)

    什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据. 进入mysql (linux ...

  8. [LeetCode] Split Array into Consecutive Subsequences 将数组分割成连续子序列

    You are given an integer array sorted in ascending order (may contain duplicates), you need to split ...

  9. Angular1.x使用小结

    之前工作以Angular1.x为主,主要做业务系统,以后工作中技术栈可能以vue为主,在此对Angular1.x的使用做一个简单总结,这里使用1.5+版本. 基本概念 1.依赖注入 依赖注入,在ang ...

  10. Spring Cloud Eureka 自我保护机制

    Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85%,如果低于 85%,Eureka Server 会将这些实例保护起来,让这些实例不会过期,但是在保护期内如果 ...