1. XSS攻擊如何實現以及保護Web站點免受跨站點腳本攻擊
使用工具和測試防範跨站點腳本攻擊. 跨站點腳本(XSS)攻擊是當今主要的攻擊途徑之一,利用了Web站點的漏洞並使用瀏覽器來竊取cookie或進行金融交易。跨站點腳本漏洞比較常見,並且要求組織部署涵蓋威脅建模、掃描工具和大量安全意識在內的周密的安全開發生命周期,以便達到最佳的XSS防護和預防。本文解釋了跨站點腳本攻擊是如何實現並且就如何保護企業Web應用免於這種攻擊提供了建議。 跨站點腳本(XSS)允許攻擊者通過利用網際網路伺服器的漏洞來發送惡意代碼到其他用戶。攻擊者利用跨站點腳本(XSS)攻擊向那些看似可信任的鏈接中注入惡意代碼。當用戶點擊了鏈接後,內嵌的程序將被提交並且會在用戶的電腦上執行,這會使黑客獲取訪問許可權並偷走敏感數據。攻擊者使用XSS來攻擊受害者機器上的漏洞並且傳輸惡意代碼而不是攻擊系統本身。 通過用戶輸入的數據返回錯誤消息的Web表格,攻擊者可以修改控制Web頁面的HTML代碼。黑客能夠在垃圾信息中的鏈接里插入代碼或者使用欺詐郵件來誘使用戶對其身份產生信任。 例如攻擊者可以發送帶有URL的郵件給受害人,這個URL指向一個Web站點並且提供瀏覽器腳本作為輸入;或者在博客或諸如Facebook、Twitter這樣的社交網站上發布惡意URL鏈接。當用戶點擊這個鏈接時,該惡意站點以及腳本將會在其瀏覽器上運行。瀏覽器不知道腳本是惡意的並將盲目地運行這個程序,這轉而允許攻擊者的瀏覽器腳本使用站點的功能來竊取cookie或者冒充合法的用戶來完成交易。 一些通常的跨站點腳本預防的最佳實踐包括在部署前測試應用代碼,並且以快速、簡明的方式修補缺陷和漏洞。Web應用開發人員應該過濾用戶的輸入來移除可能的惡意字元和瀏覽器腳本,並且植入用戶輸入過濾代碼來移除惡意字元。通常管理員也可以配置瀏覽器只接受來自信任站點的腳本或者關閉瀏覽器的腳本功能,盡管這樣做可能導致使用Web站點的功能受限。 隨著時代的進步黑客們變得更加先進,使用收集的工具集來加快漏洞攻擊進程。這意味著僅僅部署這些通常的XSS預防實踐是不夠的,保護和預防過程必須從底層開始並持續提升。預防過程必須在開發階段開始,建立在一個牢靠、安全的開發生命周期方法論之上的Web應用在發布版本中不太可能暴露出漏洞。這樣以來,不僅提升了安全性,也改善了可用性而且縮減了維護的總體費用,因為在現場環境中修補問題比在開發階段會花費更多。 威脅建模在XSS預防中也是重要的一個方面,應該納入到每個組織的安全開發生命周期當中。威脅建模評估和辨識在開發階段中應用程序面臨的所有的風險,來幫助Web開發人員更好地理解需要什麼樣的保護以及攻擊一旦得逞將對組織產生怎樣的影響。要辨識一個特定應用的威脅級別,考慮它的資產以及它訪問的敏感信息量是十分重要的。這個威脅建模過程將確保在應用的設計和開發過程中戰略性地融合了安全因素,並且增強了Web開發人員的安全意識。 對於大型項目的Web開發人員來說,源代碼掃描工具和Web應用漏洞掃描器是提高效率和減少工作量的通常選擇。
2. 【web安全】xss跨站腳本攻擊有哪些
xss攻擊可以分成兩種類型:
1.非持久型攻擊
2.持久型攻擊
非持久型xss攻擊:顧名思義,非持久型xss攻擊是一次性的,僅對當次的頁面訪問產生影響。非持久型xss攻擊要求用戶訪問一個被攻擊者篡改後的鏈接,用戶訪問該鏈接時,被植入的攻擊腳本被用戶游覽器執行,從而達到攻擊目的。
持久型xss攻擊:持久型xss,會把攻擊者的數據存儲在伺服器端,攻擊行為將伴隨著攻擊數據一直存在。
也可以分成三類:
反射型:經過後端,不經過資料庫
存儲型:經過後端,經過資料庫
DOM:不經過後端,DOM—based XSS漏洞是基於文檔對象模型Document Objeet Model,DOM)的一種漏洞,dom - xss是通過url傳入參數去控制觸發的。
3. 【論跨站腳本(XSS)攻擊的危害、成因及防範】跨站腳本攻擊
1 引言 在Web 2.0出現以前,跨站腳本(XSS)攻擊不是雀大那麼引人注目,但是在Web 2.0出現以後,配合流行的AJAX技術,XSS的危害性達到了十分嚴重的地步。比如,世界上第一個跨站腳本蠕蟲發生在MySpace網站,20小時內就傳染了一百萬個用戶,最後導致該網站癱瘓。因此我認為,XSS是在腳本環境下的溢出漏洞,其危害性絕不亞於傳統的緩沖區溢出漏洞。
2 XSS攻擊的定義
跨站腳本英文名稱是(Cross Site Script),為了與層疊樣式表(Cascading Style Sheets)區分,故命名為XSS。
XSS攻者鍵擊是指入侵者在遠程WEB頁面的HTML代碼中插入具有惡意目的的數據,用戶認為該頁面是可信賴的,但是當瀏覽器下載該頁面時,嵌入其中的腳本將被解釋執行。
3 跨站腳本漏洞的成因
3.1XSS成因概括
XSS其實就是Html的注入問題,攻擊者的輸入沒有經過嚴格的控制進入了資料庫最
終顯示給來訪的用戶,導致可以在來訪用戶的瀏覽器里以瀏覽用戶的身份執行Html代碼,數據流程如下:攻擊者的Html輸入―>web程序―>進入資料庫―>web程序―>用頃嫌豎戶瀏覽器。
3.2常規跨站漏洞
我們來看一段接收評論的代碼:
可以看到,從客戶端輸入的所有變數沒有經過任何過濾就直接進入了資料庫。攻擊者可以在表單中輸入:,點擊提交後,那麼其他用戶在瀏覽該頁面時就會不知不覺打開一個預先掛有木馬的頁面https://www.省略/muma.html,如果沒打相應的補丁,就會中馬。當然XSS的攻擊方式還有很多,比如通過跨站將上傳的圖片備份直接得到WebShell、結合AJAX技術通過蠕蟲攻擊等,因為這不是本文的重點,在這里就不一一列舉了。
3.3 UBB跨站漏洞
在很多論壇里發帖時,點擊圖片模樣的按鈕,在編輯區域就會出現[IMG][/IMG]的字樣,這是採用了一種UBB編碼的方式,如果攻擊者輸入[IMG] javascript:alert(」XSS」) [/IMG],它會默認將其轉換為,通過這種方式誘發的跨站漏洞稱為UBB跨站漏洞。
4 防範方法
4.1針對常規跨站漏洞
在常規的跨站漏洞中,正是因為攻擊者可以不受限制地引入「>」,導致了他可以操縱一個html標記,從而誘發了XSS攻擊。因此首先就要過濾掉「>」:
Replace(str,」」,」>」)
4.2針對UBB跨站漏洞
UBB跨站漏洞的防範相對來說比較復雜,首先攻擊者必須引入javascript或vbscript代碼來達到攻擊的目的,所以首先要過濾中javascript後面的冒號,將其用中文的冒號替代:
Replace(str,」:」,」:」)
但是HTML支持ASCII這樣的編碼,攻擊者又可以通過重新達到目的(58是冒號的十進制ASCII碼),所以必須過濾&符號:
Replace(str,」&」,」&」)
以上雖然已經過濾了來自標簽屬性的威脅,攻擊者還是可以通過觸發一個錯誤事件來達到目的。所以還需過濾掉以下字元:
Replace(str,」 」,」 」)//過濾空格
Replace(str,」=」,」=」)//過濾等號
Replace(str,」」」」,」"」)//過濾雙引號
5 結束語
通過以上分析我們看到,XSS是一種危害較大、較難防範,並且更加隱蔽的攻擊方式。其實只要明白其原理,再加上勤加思考防範的對策,就可以根治XSS漏洞。
參考文獻
[1]葉子青. ASP網路開發入門與實踐.人民郵電出版社,2006.
[2]韓國峰,柯華坤,王磊. ASP網站開發典型模塊與實例精講.電子工業出版社,2006.
4. 跨站腳本攻擊xss的原理是什麼有什麼危害如何防範
xxs攻擊原理是網頁對用戶輸入的字元串過濾不嚴,導致在提交輸入信息的時候瀏覽器執行了黑客嵌入的xxs腳本,致使用戶信息泄露。黑客可將偽裝過的含義腳本語句的鏈接發送給受害者,當受害者點擊鏈接的時候,由於網頁沒有過濾腳本語句,所以瀏覽器執行了腳本語句,而這個腳本語句的作用是將用戶的cookie發送到黑客指定的地址,然後黑客就可以利用受害者的cookie竊取受害者的個人信息等等。這種攻擊對伺服器沒有多大危害,但對用戶危害很大,要防範這種攻擊應該在設計網站的時候對用戶提交的內容進行嚴格的過濾。
5. xss什麼意思
xss
跨站腳本攻擊返仔(Cross Site Scripting),為不和層漏行疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故將跨站腳本攻擊縮寫為XSS。惡意攻擊者漏搜汪往Web頁面里插入惡意Script代碼,當用戶瀏覽該頁之時,嵌入其中Web裡面的Script代碼會被執行,從而達到惡意攻擊用戶的目的。
6. php防止sql注入以及xss跨站腳本攻擊
1.post數據
封裝轉義函數 防sql注入 eag:addslashes($username);addslashes($password);
eag:防止sql注入函數封裝
function deepslashes($data){
#判斷$data的表現形式 並且需要處理空的情況
if(empty($data)){
return($data);
}
#高級簡寫 return is_array($data) ? array_map('deepslashes',$data) : addslashes($data);
#初級寫法
if(is_array($data)){
#遞歸循環遍歷處理多維數組
foreach ($data as $v) {
return deepslashes($v);
}
}else{
#單一變數
return addslashes($data);
}
#初級寫法
}
2.get數據
指url 傳參數導致sql發生改變
解決方案
①強制轉換,使用函數intval 或者 數據類型 的關鍵字int
②隱式轉換,通過運算,只需要+0即可
3.xss跨站腳本攻擊
指惡意攻擊向web頁面插入html、js標簽導致頁面出現錯誤
解決方案
轉義標簽'<' '>'即可,有以下php函數可解決
htmlspecialchars 函數 和 htmlentites函數
eag:
function deepslashes($data){
#判斷$data的表現形式 並且需要處理空的情況
if(empty($data)){
return($data);
}
return is_array($data) ? array_map('deepslashes',$data) : htmlspecialchars ($data);
}
7. XSS跨站腳本攻擊剖析與防禦的內容介紹
《XSS跨站腳本攻擊剖析與防禦》是一本專門剖析XSS安全的專業書,總共8章,主要包括的內容如下。第1章 XSS初探,主要闡述了XSS的基礎知識,包括XSS的攻擊原理和危害。第2章 XSS利用方式,就當前比較流行的XSS利用方式做了深入的剖析,這些攻擊往往基於客戶端,從掛馬、竊取Cookies、會話劫持到釣魚欺騙,各種攻擊都不容忽視。第3章 XSS測試和利用工具,介紹了一些常見的XSS測試工具。第4章 發掘XSS漏洞,著重以黑盒和白盒的角度介紹如何發掘XSS漏洞,以便幫助讀者樹立安全意識。第5章 XSS Worm,講解了Web 2.0的最大威脅——跨站腳本蠕蟲,剖析了Web 2.0相關概念和其核心技術,這些知識對於理解和預防XSS Worm十分重要。第6章 Flash應用安全,就當前的Flash應用安全做出了深入闡述。第7章 深入XSS原理,討論一些比較深入的XSS理論。第8章 防禦XSS攻擊,介紹了一些防範XSS攻擊的方法,例如,運用XSS Filter進行輸入過濾和輸出編碼,使用Firefox瀏覽器的Noscript插件抵禦XSS攻擊,使用HTTP-only的Cookies同樣能起到保護敏感數據的作用。
《XSS跨站腳本攻擊剖析與防禦》適合網站管理人員、信息/網路安全或相關工作從業者、軟體開發工程師,以及任何對Web安全技術感興趣的讀者。
8. 什麼是XSS跨站腳本攻擊
什麼是XSS攻擊XSS又叫CSS (Cross Site Script) ,跨站腳本攻擊。它指的是惡意攻擊者往Web頁面里插入惡意html代碼,當用戶瀏覽該頁之時,嵌入其中Web裡面的html代碼會被執行,從而達到惡意攻擊用戶的特殊目的。XSS屬於被動式的攻擊,因為其被動且不好利用,所以許多人常忽略其危害性。而本文主要講的是利用XSS得到目標伺服器的shell。技術雖然是老技術,但是其思路希望對大家有幫助。 [編輯本段]如何尋找XSS漏洞就個人而言,我把XSS攻擊分成兩類,一類是來自內部的攻擊,主要指的是利用程序自身的漏洞,構造跨站語句,如:dvbbs的showerror.asp存在的跨站漏洞。另一類則是來來自外部的攻擊,主要指的自己構造XSS跨站漏洞網頁或者尋找非目標機以外的有跨站漏洞的網頁。如當我們要滲透一個站點,我們自己構造一個有跨站漏洞的網頁,然後構造跨站語句,通過結合其它技術,如社會工程學等,欺騙目標伺服器的管理員打開。
9. XSS(跨站腳本漏洞)誰幫忙修復下,我看著就頭大,一竅不通啊。
對於php你可以用htmlentities()函數
例如這樣:
<?php
echo htmlentities($_POST['abc']);
?>
至於asp,租念頌默認弊鄭就能防xss攻擊高液,無需任何操作
10. 如何防範XSS跨站腳本攻擊測試篇
不可信數據 不可信數據通常是來自HTTP請求的數據,以URL參數、表單欄位、標頭或者Cookie的形式。不過從安全形度來看,來自資料庫、網路伺服器和其他來源的數據往往也是不可信的,也就是說,這些數據可能沒有完全通過驗證。 應該始終對不可信數據保持警惕,將其視為包含攻擊,這意味著在發送不可信數據之前,應該採取措施確定沒有攻擊再發送。由於應用程序之間的關聯不斷深化,下游直譯程序執行的攻擊可以迅速蔓延。 傳統上來看,輸入驗證是處理不可信數據的最好辦法,然而,輸入驗證法並不是注入式攻擊的最佳解決方案。首先,輸入驗證通常是在獲取數據時開始執行的,而此時並不知道目的地所在。這也意味著我們並不知道在目標直譯程序中哪些字元是重要的。其次,可能更加重要的是,應用程序必須允許潛在危害的字元進入,例如,是不是僅僅因為SQL認為Mr. O'Malley名字包含特殊字元他就不能在資料庫中注冊呢? 雖然輸入驗證很重要,但這始終不是解決注入攻擊的完整解決方案,最好將輸入攻擊作為縱深防禦措施,而將escaping作為首要防線。 解碼(又稱為Output Encoding) 「Escaping」解碼技術主要用於確保字元作為數據處理,而不是作為與直譯程序的解析器相關的字元。有很多不同類型的解碼,有時候也被成為輸出「解碼」。有些技術定義特殊的「escape」字元,而其他技術則包含涉及若干字元的更復雜的語法。 不要將輸出解碼與Unicode字元編碼的概念弄混淆了,後者涉及映射Unicode字元到位序列。這種級別的編碼通常是自動解碼,並不能緩解攻擊。但是,如果沒有正確理解伺服器和瀏覽器間的目標字元集,有可能導致與非目標字元產生通信,從而招致跨站XSS腳本攻擊。這也正是為所有通信指定Unicode字元編碼(字元集)(如UTF-8等)的重要所在。 Escaping是重要的工具,能夠確保不可信數據不能被用來傳遞注入攻擊。這樣做並不會對解碼數據造成影響,仍將正確呈現在瀏覽器中,解碼只能阻止運行中發生的攻擊。 注入攻擊理論 注入攻擊是這樣一種攻擊方式,它主要涉及破壞數據結構並通過使用特殊字元(直譯程序正在使用的重要數據)轉換為代碼結構。XSS是一種注入攻擊形式,瀏覽器作為直譯程序,攻擊被隱藏在HTML文件中。HTML一直都是代碼和數據最差的mashup,因為HTML有很多可能的地方放置代碼以及很多不同的有效編碼。HTML是很復雜的,因為它不僅是層次結構的,而且還包含很多不同的解析器(XML、HTML、JavaScript、VBScript、CSS、URL等)。 要想真正明白注入攻擊與XSS的關系,必須認真考慮HTML DOM的層次結構中的注入攻擊。在HTML文件的某個位置(即開發者允許不可信數據列入DOM的位置)插入數據,主要有兩種注入代碼的方式: Injecting UP,上行注入 最常見的方式是關閉現有的context並開始一個新的代碼context,例如,當你關閉HTML屬性時使用">並開始新的 可以終止腳本塊,即使該腳本塊被注入腳本內方法調用內的引用字元,這是因為HTML解析器在JavaScript解析器之前運行。 Injecting DOWN,下行注入 另一種不太常見的執行XSS注入的方式就是,在不關閉當前context的情況下,引入一個subcontext。例如,將改為 ,並不需要躲開HTML屬性context,相反只需要引入允許在src屬性內寫腳本的context即可。另一個例子就是CSS屬性中的expression()功能,雖然你可能無法躲開引用CSS屬性來進行上行注入,你可以採用x ss:expression(document.write(document.cookie))且無需離開現有context。 同樣也有可能直接在現有context內進行注入,例如,可以採用不可信的輸入並把它直接放入JavaScript context。這種方式比你想像的更加常用,但是根本不可能利用escaping(或者任何其他方式)保障安全。從本質上講,如果這樣做,你的應用程序只會成為攻擊者將惡意代碼植入瀏覽器的渠道。 本文介紹的規則旨在防止上行和下行XSS注入攻擊。防止上行注入攻擊,你必須避免那些允許你關閉現有context開始新context的字元;而防止攻擊跳躍DOM層次級別,你必須避免所有可能關閉context的字元;下行注入攻擊,你必須避免任何可以用來在現有context內引入新的sub-context的字元。 積極XSS防禦模式 本文把HTML頁面當作一個模板,模板上有很多插槽,開發者允許在這些插槽處放置不可信數據。在其他地方放置不可信數據是不允許的,這是「白名單」模式,否認所有不允許的事情。 根據瀏覽器解析HTML的方式的不同,每種不同類型的插槽都有不同的安全規則。當你在這些插槽處放置不可信數據時,必須採取某些措施以確保數據不會「逃離」相應插槽並闖入允許代碼執行的context。從某種意義上說,這種方法將HTML文檔當作參數化的資料庫查詢,數據被保存在具體文職並與escaping代碼context相分離。 本文列出了最常見的插槽位置和安全放置數據的規則,基於各種不同的要求、已知的XSS載體和對流行瀏覽器的大量手動測試,我們保證本文提出的規則都是安全的。 定義好插槽位置,開發者們在放置任何數據前,都應該仔細分析以確保安全性。瀏覽器解析是非常棘手的,因為很多看起來無關緊要的字元可能起著重要作用。 為什麼不能對所有不可信數據進行HTML實體編碼? 可以對放入HTML文檔正文的不可行數據進行HTML實體編碼,如 標簽內。也可以對進入屬性的不可行數據進行實體編碼,尤其是當屬性中使用引用符號時。但是HTML實體編碼並不總是有效,例如將不可信數據放入 directlyinascript insideanHTMLcomment inanattributename <...NEVERPUTUNTRUSTEDDATAHERE...href="/test"/> inatagname 更重要的是,不要接受來自不可信任來源的JavaScript代碼然後運行,例如,名為「callback」的參數就包含JavaScript代碼段,沒有解碼能夠解決。 No.2 – 在向HTML元素內容插入不可信數據前對HTML解碼 這條規則適用於當你想把不可信數據直接插入HTML正文某處時,這包括內部正常標簽(div、p、b、td等)。大多數網站框架都有HTML解碼的方法且能夠躲開下列字元。但是,這對於其他HTML context是遠遠不夠的,你需要部署其他規則。 ...... ...... 以及其他的HTML常用元素 使用HTML實體解碼躲開下列字元以避免切換到任何執行內容,如腳本、樣式或者事件處理程序。在這種規格中推薦使用十六進制實體,除了XML中5個重要字元(&、<、 >、 "、 ')外,還加入了斜線符,以幫助結束HTML實體。 &-->& <-->< >-->> "-->" '-->''isnotrecommended /-->/ ESAPI參考實施 Stringsafe=ESAPI.encoder().encodeForHTML(request.getParameter("input")); No.3 – 在向HTML常見屬性插入不可信數據前進行屬性解碼 這條規則是將不可信數據轉化為典型屬性值(如寬度、名稱、值等),這不能用於復雜屬性(如href、src、style或者其他事件處理程序)。這是及其重要的規則,事件處理器屬性(為HTML JavaScript Data Values)必須遵守該規則。 content insidesinglequotedattribute 除了字母數字字元外,使用小於256的ASCII值HH格式(或者命名的實體)對所有數據進行解碼以防止切換屬性。這條規則應用廣泛的原因是因為開發者常常讓屬性保持未引用,正確引用的屬性只能使用相應的引用進行解碼。未引用屬性可以被很多字元破壞,包括[space] % * + , - / ; < = > ^ 和 |。 ESAPI參考實施 String safe = ESAPI.encoder().encodeForHTMLAttribute( request.getParameter( "input" ) ); No.4 – 在向HTML JavaScript Data Values插入不可信數據前,進行JavaScript解碼 這條規則涉及在不同HTML元素上制定的JavaScript事件處理器。向這些事件處理器放置不可信數據的唯一安全位置就是「data value」。在這些小代碼塊放置不可信數據是相當危險的,因為很容易切換到執行環境,因此請小心使用。