[Web安全之实战] 跨站脚本攻击XSS

一、认识XSS先

 
先说个故事吧,在上一篇,我还想说这个案例。其实什么叫攻击,很简单。获取攻击者想要的信息,就黑成功了。抓到一个Tomcat漏洞(这不是我说的,一个
认识的人说的),上传一个JSP,里面模拟HttpClient,下载一个木马,运行。OK,搞定了。所以,没有绝对的安全。

  今天,泥瓦匠带你们认识下XSS,然后关于怎么防御的问题。至于防御的话,仁者见仁智者见智。尔等啥都不配不上的就绰见,望各位阅读者相互讨论。泥瓦匠目前是搞JAVA的,所以例子上JAVA比较多。

  Q: 什么是XSS? 为啥有这个呢?

  A: 全名:Cross Site Script,中文名:跨站脚本攻击。顾名思义,是指“HTML注入”纂改了网页,插入恶意的脚本,从而在用户用浏览网页的时候,控制用户浏览器的一种攻击。

  XSS根据攻击的稳定性可分为三种:反射型XSS, 存储型XSS,DOM Based XSS.

  

二、XSS攻击

  再来了解下XSS,是如何攻击?泥瓦匠这时候想到一句话:知己知彼,百战百胜吧。这攻击我们不会很详细解释,毕竟想说的是XSS防御嘛。首先,泥瓦匠要介绍下的是:

  XSS
Playload,所谓用以完成各种具体的功能的恶意脚本。这时候我想到了黑客精神中的小插曲,现在所谓的“黑客”不是真正的黑客,而是称为脚本小子
(Script Kid)。常见的一个XSS
Playload,就是通过读取浏览器的Cookie对象,从而发起了‘Cookie劫持’攻击。这个泥瓦匠会教你们去防御哈,其中Cookie的
‘HttpOnly’标识可以防止哦。

  强大的XSS Playload可以做以下的事情哈:1、构造 GET 与 POST 请求 2、各种钓鱼 3、识别用户浏览器 等等
Q&A

  Q:什么叫做钓鱼呢?
  A:顾名思义,愿者上钩,这里做贬义用法。比如,人家用一个假的弹出框,或者假的页面让你输入QQ信息,或者啥账号信息。其实你一输入人家服务器获取到你的账户密码了。这就是鱼儿上钩了。 如图比喻:

 

三、XSS防御(重点)

  兵来将挡,水来土掩。泥瓦匠在Web安全上,想提醒大家的是:“再高的树,猴子也能爬上去。”因此,我们考虑的地方有些默认都给你做好了,有些需要我们自己去关心,去设置。

  其实在看不到的地方很多已经对抗XSS做了些措施。比如各种浏览器等。

  一、按着上面的思路,泥瓦匠先聊下Cookie,一个Cookie,我们是这样使用的:
    1、浏览器下服务器发送请求,准备获取Cookie

    2、服务器返回发送Cookie头,向客户端浏览器写入Cookie。(注意哦,这里是浏览器,不要当成什么浏览器内核)

    3、在Cookie到期前,浏览器所有页面,都会发送Cookie。

 
这就意味着,我们Cookie不能乱用。就像Session一样,所以在使用的时候,要注意下。有时候Cooike在用于记住密码的时候,千万要注意要将
Cookie设置HttpOnly属性为Ture。这里我以SpringMVC为例子。如果用到Cookie的时候,应该这样:


1

2

3

4

5

6

7

         // create cookie and set it in response

Cookie cookie1 = new Cookie("cookie1", "cookieValueHttpOnly");

Cookie cookie2 = new Cookie("cookie2", "cookieValue");

cookie1.setHttpOnly(true);

 

response.addCookie(cookie1);

response.addCookie(cookie2);

截个Controller整个代码看看:

我们打开浏览器可以看到下面这种结果,访问URL这个Controller层,打开Firebug查看:

  二、输入校验

  输入校验的逻辑必须放在服务端中实现。如果用JS进行的话,容易被攻击者绕过去。所以普遍的做法是,类似很多代码一样进行Double Check:”客户端JS校验和服务端校验一起,这样客户端JS校验会阻挡大部分甚至说99%的用户的误操作。”

  在XSS防御上,我们需要对用户输入的一些特殊字符校验,过滤或者是编码。这种输入校验的方式成为“XSS Filter”。首先我们在配置文件中,

其中的路径配置当然,在你需要的地方配置下咯。然后泥瓦匠在这里写了个,Http请求装饰类,用来对这些参数的过滤。说干就干呗~实战出经验。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper

{

 

    public XssHttpServletRequestWrapper(HttpServletRequest request)

    {

        super(request);

    }

 

    public String[] getParameterValues(String parameter)

    {

        String[] values = super.getParameterValues(parameter);

        if (values==null)

        {

            return null;

        }

        int count = values.length;

        String[] encodedValues = new String[count];

        for (int i = 0; i < count; i++)

        {

            encodedValues[i] = cleanXSS(values[i]);

        }

        return encodedValues;

    }

 

    public String getParameter(String parameter)

    {

        String value super.getParameter(parameter);

        if (value == null)

        {

            return null;

        }

        return cleanXSS(value);

    }

 

    public String getHeader(String name)

    {

        String value super.getHeader(name);

        if (value == null)

            return null;

        return cleanXSS(value);

    }

 

    /**

      * @Title: cleanXSS

      * @Description: You'll need to remove the spaces from the html entities below

      * @param @param value

      * @param @return

      * @return String

      */

    private String cleanXSS(String value)

    {

        value = value.replaceAll("<", "& lt;").replaceAll(">", "& gt;");

        value = value.replaceAll("\\(", "& #40;").replaceAll("\\)", "& #41;");

        value = value.replaceAll("'", "& #39;");

        value = value.replaceAll("eval\\((.*)\\)", "");

        value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");

        value = value.replaceAll("script", "");

        return value;

    }

}

  三、输出校验

  一般来说,除了富文本之外,在变量输出到HTML页面,可以使用编码或者转义的方式来防御XSS攻击。这是一种各家委婉的方式吧。

四、总结

  用兵之道在于,如何正确的使用,才能以少胜多。Web安全这场战争也一样,所以要如何正确的使用XSS防御。

时间: 2024-12-23 04:35:57

[Web安全之实战] 跨站脚本攻击XSS的相关文章

面对跨站脚本攻击XSS的安全防御的有价值的建议

此文章主要阐述的是面对跨站脚本攻击XSS的安全防御的相关建议,你如果对跨站脚本攻击XSS的安全防御的相关建议有兴趣的话你就可以点击以下的文章进行观看了,以下就是文章的详细内容介绍,望大家借鉴.XSS攻击作为Web业务的最大威胁,危害的不仅仅是Web业务本身,对访问Web业务的用户也会带来直接的影响,如何防范和阻止XSS攻击,保障Web站点的业务安全呢? 首先我们就要了解什么是XSS攻击.第 1 页 面对跨站脚本攻击XSS的安全防御建议XSS攻击作为Web业务的最大威胁之一,不仅危害Web业务本身

Asp.net跨站脚本攻击XSS实例分享

 Asp.net跨站脚本攻击XSS实例分享 常用攻击代码: http://target/vuln-search.aspx?term= </XSS/*-*/STYLE=xss:e/**/xpression(alert('XSS'))> Redirection Attack http://target/vuln-search.aspx?term= </XSS/*-*/STYLE=xss:e/**/xpression(window.location="http://www.xxx

Web安全之跨站脚本攻击(XSS)

什么是XSS 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的. XSS的攻击场景 反射型这类攻击方式主要借助URL来实施.URL的构成分为协议.域名.端口.路径.查询几部分构成.如图所示: XSS往往在"查询"部分发现漏

《XSS跨站脚本攻击剖析与防御》—第6章6.1节参 考 文 献

参 考 文 献 XSS跨站脚本攻击剖析与防御 [1] <精通 JavaScript> (美)John Resi /陈贤安(译) [2] <JavaScript核心技术> (美)Shelley Powers /苏敬凯(译) [3] <XSS Attacks: Cross Site Scripting Exploits and Defense>Seth Fogie/Jeremiah Grossman/Robert Hansen/Anton Rager/Petko D. Pe

安全测试-跨站脚本攻击(xss)

跨站脚本简称XSS(cross sites script),是web安全里比较重要也比较普遍的一种安全漏洞.跨站脚本是指输入恶意的代码,如果程序没有对输入输出进行验证,则浏览器将会被攻击者控制.可以得到用户cookie.系统.浏览器信息,保存型xss还可以进行钓鱼,以获取更多的用户信息. 最常见的测试跨站脚本的方法,输入 <Script>alert(1)</script> 以及它的各种变体 <script>alert(1) </script>实体 %3Csc

《XSS跨站脚本攻击剖析与防御》目录—导读

内容提要 XSS跨站脚本攻击剖析与防御 本书是一本专门剖析XSS安全的专业书,总共8章,主要包括的内容如下. 第1章 XSS初探,主要阐述了XSS的基础知识,包括XSS的攻击原理和危害.第2章 XSS利用方式,就当前比较流行的XSS利用方式做了深入的剖析,这些攻击往往基于客户端,从挂马.窃取Cookies.会话劫持到钓鱼欺骗,各种攻击都不容忽视.第3章 XSS测试和利用工具,介绍了一些常见的XSS测试工具.第4章 发掘XSS漏洞,着重以黑盒和白盒的角度介绍如何发掘XSS漏洞,以便帮助读者树立安全

Web十大安全隐患之XSS跨站脚本

上次提到的是sql注入,算是较大的安全隐患,今天我们来介绍另外一种较为严重的安全隐患--XSS跨站脚本攻击. 首先咱们来说什么是跨站脚本攻击.它的英文叫"CrossSite Scripting",通俗点说就是攻击者向web页面里跨站的插入恶意html代码,那么当用户浏览该页的时候,嵌入到web中的html代码就会被执行.我们经常看到的重定向啊,以及一些钓鱼网站,大多数利用的就是这种技术.比如有个广告,里边网址是item.taobao.com/.xxxx的,是某个人在某论坛发的广告链接,

《XSS跨站脚本攻击剖析与防御》—第6章6.4节利用Flash进行XSS攻击剖析

6.4 利用Flash进行XSS攻击剖析 XSS跨站脚本攻击剖析与防御 利用嵌入Web页面中的Flash进行XSS有一个决定因素:allowScriptAccess属性.allowScriptAccess是使用或 下面是一个简单的示例: allowScriptAccess属性控制着Flash与HTML页面的通信,可选的值有3个: always:允许随时执行脚本操作 never:禁止所有脚本执行操作 samedomain:只有在Flash 应用程序来自与HTML页相同的域时才允许执行脚本操作 其属

最新的黑客技术:XSS跨站脚本攻击详细介绍_漏洞研究

总体上介绍 简单介绍什么是XSS攻击 如何寻找XSS漏洞 对于XSS攻击的总体思路 来自内部的攻击: 如何寻找内部的XSS漏洞 如何构造攻击 如何利用 结何实例攻击,如DVBBS&BBSXP 来自外部的攻击 如何构造XSS攻击 如何欺骗管理员打开 XSS与其它技术的结何 与mssql injection的结合 QQ跨站的结何 国内大型统计网站的跨站漏洞 社会工程学 制作恐怖的flash木马 制作方法由李丰初写 总结  正文: XSS总体介绍 什么是XSS攻击 XSS又叫CSS  (Cross S