299

跨站腳本攻擊XSS

時(shí)間: 2015-10-09 11:37:33   點(diǎn)擊數(shù): 29297   來(lái)源: 耐思智慧

今天,泥瓦匠帶你們認(rèn)識(shí)下XSS,然后關(guān)于怎么防御的問(wèn)題。至于防御的話,仁者見(jiàn)仁智者見(jiàn)智。爾等啥都不配不上的就綽見(jiàn),望各位閱讀者相互討論。泥瓦匠目前是搞JAVA的,所以例子上JAVA比較多。


一、認(rèn)識(shí)XSS先

先說(shuō)個(gè)故事吧,在上一篇,我還想說(shuō)這個(gè)案例。其實(shí)什么叫攻擊,很簡(jiǎn)單。獲取攻擊者想要的信息,就黑成功了。抓到一個(gè)Tomcat漏洞(這不是我說(shuō)的,一個(gè)認(rèn)識(shí)的人說(shuō)的),上傳一個(gè)JSP,里面模擬HttpClient,下載一個(gè)木馬,運(yùn)行。OK,搞定了。所以,沒(méi)有絕對(duì)的安全。

今天,泥瓦匠帶你們認(rèn)識(shí)下XSS,然后關(guān)于怎么防御的問(wèn)題。至于防御的話,仁者見(jiàn)仁智者見(jiàn)智。爾等啥都不配不上的就綽見(jiàn),望各位閱讀者相互討論。泥瓦匠目前是搞JAVA的,所以例子上JAVA比較多。



Q: 什么是XSS? 為啥有這個(gè)呢?

A: 全名:Cross Site Script,中文名:跨站腳本攻擊。顧名思義,是指“HTML注入”纂改了網(wǎng)頁(yè),插入惡意的腳本,從而在用戶用瀏覽網(wǎng)頁(yè)的時(shí)候,控制用戶瀏覽器的一種攻擊。

XSS根據(jù)攻擊的穩(wěn)定性可分為三種:反射型XSS, 存儲(chǔ)型XSS,DOM Based XSS.

<img title="image" alt="image" width="390" height="311" src="http://s9.51cto.com/wyfs02/M02/59/3F/wKioL1TNg4bxyLbwAAA-WGcB1yw307.jpg" style="border:0px;" />

二、XSS攻擊

再來(lái)了解下XSS,是如何攻擊?泥瓦匠這時(shí)候想到一句話:知己知彼,百戰(zhàn)百勝吧。這攻擊我們不會(huì)很詳細(xì)解釋,畢竟想說(shuō)的是XSS防御嘛。首先,泥瓦匠要介紹下的是:

XSS Playload,所謂用以完成各種具體的功能的惡意腳本。這時(shí)候我想到了黑客精神中的小插曲,現(xiàn)在所謂的“黑客”不是真正的黑客,而是稱為腳本小子(Script Kid)。常見(jiàn)的一個(gè)XSS Playload,就是通過(guò)讀取瀏覽器的Cookie對(duì)象,從而發(fā)起了‘Cookie劫持’攻擊。這個(gè)泥瓦匠會(huì)教你們?nèi)シ烙渲蠧ookie的‘HttpOnly’標(biāo)識(shí)可以防止哦。

強(qiáng)大的XSS Playload可以做以下的事情哈:1、構(gòu)造 GET 與 POST 請(qǐng)求 2、各種釣魚(yú) 3、識(shí)別用戶瀏覽器 等等

Q&A

Q:什么叫做釣魚(yú)呢?

A:顧名思義,愿者上鉤,這里做貶義用法。比如,人家用一個(gè)假的彈出框,或者假的頁(yè)面讓你輸入QQ信息,或者啥賬號(hào)信息。其實(shí)你一輸入人家服務(wù)器獲取到你的賬戶密碼了。這就是魚(yú)兒上鉤了。 如圖比喻:

<img title="image" alt="image" width="417" height="318" src="http://s8.51cto.com/wyfs02/M02/59/42/wKiom1TNgqDTmmgOAAA3ZIJeddY827.jpg" style="border:0px;" />

三、XSS防御(重點(diǎn))

兵來(lái)將擋,水來(lái)土掩。泥瓦匠在Web安全上,想提醒大家的是:“再高的樹(shù),猴子也能爬上去!币虼,我們考慮的地方有些默認(rèn)都給你做好了,有些需要我們自己去關(guān)心,去設(shè)置。

其實(shí)在看不到的地方很多已經(jīng)對(duì)抗XSS做了些措施。比如各種瀏覽器等。

一、按著上面的思路,泥瓦匠先聊下Cookie,一個(gè)Cookie,我們是這樣使用的:

1、瀏覽器下服務(wù)器發(fā)送請(qǐng)求,準(zhǔn)備獲取Cookie

2、服務(wù)器返回發(fā)送Cookie頭,向客戶端瀏覽器寫(xiě)入Cookie。(注意哦,這里是瀏覽器,不要當(dāng)成什么瀏覽器內(nèi)核)

3、在Cookie到期前,瀏覽器所有頁(yè)面,都會(huì)發(fā)送Cookie。

這就意味著,我們Cookie不能亂用。就像Session一樣,所以在使用的時(shí)候,要注意下。有時(shí)候Cooike在用于記住密碼的時(shí)候,千萬(wàn)要注意要將Cookie設(shè)置HttpOnly屬性為T(mén)ure。這里我以SpringMVC為例子。如果用到Cookie的時(shí)候,應(yīng)該這樣:


 // 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);


截個(gè)Controller整個(gè)代碼看看:

<img title="image" alt="image" width="498" height="371" src="http://s4.51cto.com/wyfs02/M02/59/3F/wKioL1TNg4bwYQYVAABwFSGDcPM003.jpg" style="border:0px;" />

我們打開(kāi)瀏覽器可以看到下面這種結(jié)果,訪問(wèn)URL這個(gè)Controller層,打開(kāi)Firebug查看:

<img title="image" alt="image" width="498" height="136" src="http://s7.51cto.com/wyfs02/M00/59/3F/wKioL1TNg4eRUGJhAAA8ZC-kclw848.jpg" style="border:0px;" />

二、輸入校驗(yàn)

輸入校驗(yàn)的邏輯必須放在服務(wù)端中實(shí)現(xiàn)。如果用JS進(jìn)行的話,容易被攻擊者繞過(guò)去。所以普遍的做法是,類似很多代碼一樣進(jìn)行Double Check:”客戶端JS校驗(yàn)和服務(wù)端校驗(yàn)一起,這樣客戶端JS校驗(yàn)會(huì)阻擋大部分甚至說(shuō)99%的用戶的誤操作!

在XSS防御上,我們需要對(duì)用戶輸入的一些特殊字符校驗(yàn),過(guò)濾或者是編碼。這種輸入校驗(yàn)的方式成為“XSS Filter”。首先我們?cè)谂渲梦募校?

<img title="image" alt="image" width="498" height="304" src="http://s5.51cto.com/wyfs02/M02/59/42/wKiom1TNgqLz9TO-AACA0kcgxeM065.jpg" style="border:0px;" />

其中的路徑配置當(dāng)然,在你需要的地方配置下咯。然后泥瓦匠在這里寫(xiě)了個(gè),Http請(qǐng)求裝飾類,用來(lái)對(duì)這些參數(shù)的過(guò)濾。說(shuō)干就干唄~實(shí)戰(zhàn)出經(jīng)驗(yàn)。


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;
    }
}


三、輸出校驗(yàn)

一般來(lái)說(shuō),除了富文本之外,在變量輸出到HTML頁(yè)面,可以使用編碼或者轉(zhuǎn)義的方式來(lái)防御XSS攻擊。這是一種各家委婉的方式吧。

四、總結(jié)

  用兵之道在于,如何正確的使用,才能以少勝多。Web安全這場(chǎng)戰(zhàn)爭(zhēng)也一樣,所以要如何正確的使用XSS防御。如果你是菜鳥(niǎo),沒(méi)關(guān)系,建議你使用企業(yè)自助建站系統(tǒng)建站寶盒,通過(guò)這套程序您可以有效規(guī)避跨站腳本攻擊XSS,將合適的工作交給最專業(yè)的人,制作一個(gè)擁有電腦站+手機(jī)站+微站+手機(jī)APP的四站一體的企業(yè)商城網(wǎng)站,在線銷售產(chǎn)品豈不是很好呢。

Writer:BYSocket(泥沙磚瓦漿木匠)


上一篇:公司官網(wǎng)打開(kāi)慢,優(yōu)化服務(wù)器負(fù)載均衡解決方案 下一篇:給企業(yè)微信運(yùn)營(yíng)最中肯的10條建議

旗下網(wǎng)站:耐思智慧 - 淘域網(wǎng) - 我的400電話 - 中文域名:耐思尼克.cn 耐思尼克.top

耐思智慧 © 版權(quán)所有 Copyright © 2000-2024 IISP.COM,Inc. All rights reserved

備案號(hào)碼: 粵ICP備09063828號(hào)  公安備案號(hào): 公安備案 粵公網(wǎng)安備 44049002000123號(hào)  域名注冊(cè)服務(wù)機(jī)構(gòu)許可:粵D3.1-20240003 CN域名代理自深圳萬(wàn)維網(wǎng)

聲明:本網(wǎng)站中所使用到的其他各種版權(quán)內(nèi)容,包括但不限于文章、圖片、視頻、音頻、字體等內(nèi)容版權(quán)歸原作者所有,如權(quán)利所有人發(fā)現(xiàn),請(qǐng)及時(shí)告知,以便我們刪除版權(quán)內(nèi)容

本站程序界面、源代碼受相關(guān)法律保護(hù), 未經(jīng)授權(quán), 嚴(yán)禁使用; 耐思智慧 © 為我公司注冊(cè)商標(biāo), 未經(jīng)授權(quán), 嚴(yán)禁使用

法律顧問(wèn):珠海知名律師 廣東篤行律師事務(wù)所 夏天風(fēng) 律師