當前位置:首頁 » 編程軟體 » 跨站腳本攻擊測試

跨站腳本攻擊測試

發布時間: 2023-03-09 02:39:38

⑴ 什麼是XSS跨站腳本攻擊

什麼是XSS攻擊XSS又叫CSS (Cross Site Script) ,跨站腳本攻擊。它指的是惡意攻擊者往Web頁面里插入惡意html代碼,當用戶瀏覽該頁之時,嵌入其中Web裡面的html代碼會被執行,從而達到惡意攻擊用戶的特殊目的。XSS屬於被動式的攻擊,因為其被動且不好利用,所以許多人常忽略其危害性。而本文主要講的是利用XSS得到目標伺服器的shell。技術雖然是老技術,但是其思路希望對大家有幫助。 [編輯本段]如何尋找XSS漏洞就個人而言,我把XSS攻擊分成兩類,一類是來自內部的攻擊,主要指的是利用程序自身的漏洞,構造跨站語句,如:dvbbs的showerror.asp存在的跨站漏洞。另一類則是來來自外部的攻擊,主要指的自己構造XSS跨站漏洞網頁或者尋找非目標機以外的有跨站漏洞的網頁。如當我們要滲透一個站點,我們自己構造一個有跨站漏洞的網頁,然後構造跨站語句,通過結合其它技術,如社會工程學等,欺騙目標伺服器的管理員打開。

⑵ 什麼是phpinfo xss跨站腳本攻擊漏洞

php是一款被廣泛使用的編程語言,可以被嵌套在html里用做web程序開發。phpinfo()是用來顯示當前php環境的一個函數,許多站點和程序都會將phpinfo放在自己的站點上或者在程序里顯示,但是phpinfo里存在一些安全問題,導致精心構造數據就可以產生一個跨站腳本漏洞,可以被用來進行攻擊。

漏洞成因: phpinfo頁面對輸入的參數都做了詳細的過濾,但是沒有對輸出的進行charset的指定,而在一些瀏覽器里如IE7里,你可以讓它自動選擇編碼或者通過一個iframe頁面給它指定編碼,這樣就可以饒過phpinfo的過濾而產生一個跨站腳本漏洞。
漏洞來源: http://www.80sec.com/release/phpinfo-xss.txt
漏洞利用: 利用代碼如下:

<html>
<head>
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=UTF-7">
</head>
<body>
<iframe src="http://www.80sec.com/phpinfo.php?+ADw-SCRIPT+AD4-alert(document.domain);+ADw-/SCRIPT+AD4-=1">

以上代碼在IE7+php 5.2.6測試成功。phpinfo頁面的xss甚至比其他頁面更加危險,因為如果有phpinfo的存在,惡意攻擊者可以利用phpinfo的輸出bypass如httponly和一些基礎認證。
漏洞影響: 影響所有版本的php和瀏覽器IE7
漏洞修補: 建議暫時刪除站點的phpinfo頁面避免被人利用。

⑶ 跨站腳本攻擊,如何利用工具和測試防範跨站點腳本攻擊

跨站點腳本(XSS)允許攻擊者通過利用網際網路伺服器的漏洞來發送惡意代碼到其他用戶。攻擊者利用跨站點腳本(XSS)攻擊向那些看似可信任的鏈接中注入惡意代碼。當用戶點擊了鏈接後,內嵌的程序將被提交並且會在用戶的電腦上執行,這會使黑客獲取訪問許可權並偷走敏感數據。攻擊者使用XSS來攻擊受害者機器上的漏洞並且傳輸惡意代碼而不是攻擊系統本身。 通過用戶輸入的數據返回錯誤消息的Web表格,攻擊者可以修改控制Web頁面的HTML代碼。黑客能夠在垃圾信息中的鏈接里插入代碼或者使用欺詐郵件來誘使用戶對其身份產生信任。 例如攻擊者可以發送帶有URL的郵件給受害人,這個URL指向一個Web站點並且提供瀏覽器腳本作為輸入;或者在博客或諸如Facebook、Twitter這樣的社交網站上發布惡意URL鏈接。當用戶點擊這個鏈接時,該惡意站點以及腳本將會在其瀏覽器上運行。瀏覽器不知道腳本是惡意的並將盲目地運行這個程序,這轉而允許攻擊者的瀏覽器腳本使用站點的功能來竊取cookie或者冒充合法的用戶來完成交易。 一些通常的跨站點腳本預防的最佳實踐包括在部署前測試應用代碼,並且以快速、簡明的方式修補缺陷和漏洞。Web應用開發人員應該過濾用戶的輸入來移除可能的惡意字元和瀏覽器腳本,並且植入用戶輸入過濾代碼來移除惡意字元。通常管理員也可以配置瀏覽器只接受來自信任站點的腳本或者關閉瀏覽器的腳本功能,盡管這樣做可能導致使用Web站點的功能受限。 隨著時代的進步黑客們變得更加先進,使用收集的工具集來加快漏洞攻擊進程。這意味著僅僅部署這些通常的XSS預防實踐是不夠的,保護和預防過程必須從底層開始並持續提升。預防過程必須在開發階段開始,建立在一個牢靠、安全的開發生命周期方法論之上的Web應用在發布版本中不太可能暴露出漏洞。這樣以來,不僅提升了安全性,也改善了可用性而且縮減了維護的總體費用,因為在現場環境中修補問題比在開發階段會花費更多。 威脅建模在XSS預防中也是重要的一個方面,應該納入到每個組織的安全開發生命周期當中。威脅建模評估和辨識在開發階段中應用程序面臨的所有的風險,來幫助Web開發人員更好地理解需要什麼樣的保護以及攻擊一旦得逞將對組織產生怎樣的影響。要辨識一個特定應用的威脅級別,考慮它的資產以及它訪問的敏感信息量是十分重要的。這個威脅建模過程將確保在應用的設計和開發過程中戰略性地融合了安全因素源碼天空 ,並且增強了Web開發人員的安全意識。 對於大型項目的Web開發人員來說,源代碼掃描工具和Web應用漏洞掃描器是提高效率和減少工作量的通常選擇。

⑷ 如何進行跨站腳本攻擊

你好~
XSS漏洞產生的原因:

跨站點腳本的主要原因是程序猿對用戶的信任。開發人員輕松地認為用戶永遠不會試圖執行什麼出格的事情,所以他們創建應用程序,卻沒有使用任何額外的代碼來過濾用戶輸入以阻止任何惡意活動。另一個原因是,這種攻擊有許多變體,用製造出一種行之有效的XSS過濾器是一件比較困難的事情。
但是這只是相對的,對用戶輸入數據的」編碼」和」過濾」在任何時候都是很重要的,我們必須採取一些針對性的手段對其進行防禦。

如何創造一個良好的XSS過濾器來阻止大多數XSS攻擊代碼

1 .需要重點」編碼」和」過濾」的對象
The URL
HTTP referrer objects
GET parameters from a form
POST parameters from a form
Window.location
Document.referrer
document.location
document.URL
document.URLUnencoded
cookie data
headers data
database data

防禦XSS有一個原則:
以當前的應用系統為中心,所有的進入應用系統的數據都看成是輸入數據(包括從FORM表單或者從資料庫獲取到的數據),所有從當前應用系統流出的數據都看作是輸出(包括輸出到用戶瀏覽器或向資料庫寫入數據)
對輸入的數據進行」過濾」,對輸出數據進行」編碼」。這里的」編碼」也要注意,必須針對數據具體的上下文語境進行針對性的編碼。例如數據是輸出到HTML中的那就要進行HtmlEncode,如果數據是輸出到javascript代碼中進行拼接的,那就要進行javascriptEncode。
如果不搞清楚數據具體輸出的語境,就有可能因為HtmlParser()和javascriptParser()兩種解析引擎的執行先後問題導致看似嚴密的」編碼」形同虛設。

⑸ 如何檢測SQL注入技術以及跨站腳本攻擊

在最近兩年中,安全專家應該對網路應用層的攻擊更加重視。因為無論你有多強壯的防火牆規則設置或者非常勤於補漏的修補機制,如果你的網路應用程序開發者沒
有遵循
安全代碼進行開發,攻擊者將通過80埠進入你的系統。廣泛被使用的兩個主要攻擊技術是SQL注入[ref1]和CSS[ref2]攻擊。SQL注入是
指:通過互聯網的輸入區域,插入SQL meta-characters(特殊字元
代表一些數據)和指令,操縱執行後端的SQL查詢的技術。這些攻擊主要針對其他組織的WEB伺服器。CSS攻擊通過在URL里插入script標簽,然後

誘導信任它們的用戶點擊它們,確保惡意Javascript代碼在受害人的機器上運行。這些攻擊利用了用戶和伺服器之間的信任關系,事實上伺服器沒有對輸
入、輸出進行檢測,從而未拒絕javascript代碼。
這篇文章討論SQL注入和CSS攻擊漏洞的檢測技術。網上已經有很多關於這兩種基於
WEB攻擊的討論,比如如何實施攻擊,他們的影響,怎樣更好的編制和設計程序防止這些攻擊。 然而,
對如何檢測這些攻擊並沒有足夠的討論。我們採用流行的開源的IDS Snort[ref
3],組建根據檢測這些攻擊的規則的正則表達式。附帶,Snort默認規則設定包含檢測CSS的方法,但是這些容易被避開檢測。比如大多通過hex進制編
碼,如%3C%73%63%72%69%70% 74%3E代替避開檢測。
依賴level of
paranoia組織的能力,我們已經編寫了多種檢測相同攻擊的規則。如果你希望檢測各種可能的SQL注入攻擊,那麼你需要簡單的留意任何現行的SQL
meta-characters,如單引號,分號和雙重破折號。同樣的一個極端檢測CSS攻擊的方法,只要簡單地提防HTML標記的角括弧。但這樣會檢測
出很多錯誤。為了避免這些,這些規則需要修改使它檢測更精確些, 當仍然不能避免錯誤。
在Snort規則中使用pcre(Perl
Compatible Regular
Expressions)[ref4]關鍵字,每個規則可以帶或不帶其他規則動作。這些規則也可以被公用軟體如grep(文檔搜索工具)使用,來審閱網路
伺服器日誌。 但是,需要警惕的是,用戶的輸入只有當以GET提交請求時,WEB伺服器才會記錄日記,如果是以POST提交的請求在日記中是不會記錄的。
2. SQL注入的正則表示式

你為SQL注入攻擊選擇正則表示式的時候,重點要記住攻擊者可以通過提交表單進行SQL注入,也可以通過Cookie區域。你的輸入檢測邏輯應該考慮用戶

組織的各類型輸入(比如表單或Cookie信息)。並且如果你發現許多警告來自一個規則,請留意單引號或者是分號,也許些字元是你的Web應用程序創造的
合法的在CookieS中的輸入。因此, 您需要根據你的特殊的WEB應用程序評估每個規則。
依照前面提到,一個瑣細的檢測SQL射入攻擊的正則表達式要留意SQL特殊的meta-characters 譬如單引號(』)雙重擴則號(--),為了查出這些字元和他們hex等值數, 以下正則表達式適用:
2.1 檢測SQL meta-characters的正則表達式
/(\%27)|(\』)|(\-\-)|(\%23)|(#)/ix
解釋:

們首先檢查單引號等值的hex,單引號本身或者雙重擴折號。這些是MS SQL Server或Oracle的字元, 表示後邊的為評論,
隨後的都將被忽略。 另外,如果你使用MySQL,你需要留意 』#』和它等值的hex的出現。注意我們不需要檢查雙重破折號等值的hex,
因為這不是HTML meta-character, 瀏覽器不會進行編碼。 並且,
如果攻擊者設法手工修改雙重破折號為它的hex值%2D(使用代理像Achilles[ref 5]), SQL注入將失敗。
加入上述正則表達式的新的Snort規則如下:
alert
tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"SQL
Injection - Paranoid";
flow:to_server,established;uricontent:".pl";pcre:"/(\%27)|(\』)|(\-\-)|(%23)|(#)/i";
classtype:Web-application-attack; sid:9099; rev:5;)
在本篇討論中,
uricontent關鍵字的值為".pl ", 因為在我們的測試環境里, CGI
程序是用Perl寫的。uricontent關鍵字的值取決於您的特殊應用, 這個值也許是".php ", 或" .asp ", 或" .jsp
", 等。 從這點考慮, 我們不顯示對應的Snort 規則, 但是我們會給出創造這些規則的正則表達式。
通過這些正則表達式你可以很簡單的創造很多的Snort規則.在前面的正則表達式里,
我們檢測雙重破折號是因為:即便沒有單引號的存在那裡也可能是SQL射入點[ref 6]。 例如, SQL查詢條目只包含數值,如下:
select value1, value2, num_value3 from database
where num_value3=some_user_supplied_number
這種情況,攻擊者可以執行額外的SQL查詢, 示範提交如下輸入:
3; insert values into some_other_table
最後, pcre的修飾符』 i』 和』 x 』 是用於分別匹配大小寫和忽略空白處的。 上面的規則也可以另外擴展來檢查分號的存在。然而,分號很可以是正常HTTP應答的一部分。為了減少這種錯誤,也是為了任何正常的單引號和雙重擴折號的出
現,上面的規則應該被修改成先檢測=號的存。用戶輸入會響應一個GET或POST請求,一般輸入提交如下:
username=some_user_supplied_value&password=some_user_supplied_value
因此, SQL 注入嘗試將導致用戶的輸入出現在a = 號或它等效的hex值之後。
2.2 修正檢測SQL meta-characters的正則表達式
/((\%3D)|(=))[^\n]*((\%27)|(\』)|(\-\-)|(\%3B)|(:))/i
解釋:
這個規則首先留意 = 號或它的hex值(%3D),然後考慮零個或多個除換行符以外的任意字元,最後檢測單引號,雙重破折號或分號。

型的SQL注入會嘗試圍繞單引號的用途操作原來的查詢,以便得到有用的價值。討論這個攻擊一般使用1』or』1』=』1字元串. 但是,
這個串的偵查很容易被逃避,譬如用1』or2>1 --.
然而唯一恆定的部分是最初的字元的值,跟隨一單引號,再加』or』。隨後的布爾邏輯可能在一定范圍上變化,可以是普通樣式也可能是非常復雜的。這些攻擊可
以相當精確被偵測,通過以下的正則表達式。2.3章節講解。
2.3 典型的 SQL 注入攻擊的正則表達式
/\w*((\%27)|(\』))((\%6F)|o|(\%4F))((\%72)|r|(\%52))/ix
解釋:
\w* - 零個或多個字元或者下劃線。
(\%27)|\』 - 單引號或它的hex等值。
(\%6 F)|o|(\%4 F))((\%72)|r|-(\%52) -『or』的大小寫以及它的hex等值。
』union』SQL
查詢在SQL注入各種資料庫中攻擊中同樣是很常見的。如果前面的正則表達式僅僅檢測單引號或則其他的SQL meta characters
,會造成很多的錯誤存在。你應該進一步修改查詢,檢測單引號和關鍵字『union』。這同樣可以進一步擴展其他的SQL關鍵字,像』select』,
』insert』, 』update』, 』delete』, 等等。
2.4 檢測SQL注入,UNION查詢關鍵字的正則表達式
/((\%27)|(\』))union/ix
(\%27)|(\』) - 單引號和它的hex等值
union - union關鍵字
可以同樣為其他SQL查詢定製表達式,如 >select, insert, update, delete, drop, 等等.

果,到這個階段,攻擊者已經發現web應用程序存在SQL注入漏洞,他將嘗試利用它。如果他認識到後端伺服器式MS SQL
server,他一般會嘗試運行一些危險的儲存和擴展儲存過程。這些過程一般以『sp』或『xp』字母開頭。典型的,他可能嘗試運行
『xp_cmdshell』擴展儲存過程(通過SQL Server執行Windows
命令)。SQL伺服器的SA許可權有執行這些命令的許可權。同樣他們可以通過xp_regread, xp_regwrite等儲存過程修改注冊表。
2.5 檢測MS SQL Server SQL注入攻擊的正則表達式
/exec(\s|\+)+(s|x)p\w+/ix
解釋:
exec - 請求執行儲存或擴展儲存過程的關鍵字
(\s|\+)+ - 一個或多個的空白或它們的http等值編碼
(s|x) p- 『sp』或『xp』字母用來辨認儲存或擴展儲存過程
\w+ - 一個或多個字元或下劃線來匹配過程的名稱
3. 跨站腳本(CSS)的正則表達式

發動CSS攻擊或檢測一個網站漏洞的時候, 攻擊者可能首先使簡單的HTML標簽如(粗體),(斜體)或(下劃線),或者他可能嘗試簡單的
script標簽如alert("OK").
因為大多數出版物和網路傳播的檢測網站是否有css漏洞都拿這個作為例子。這些嘗試都可以很簡單的被檢測出來。
然而,高明點的攻擊者可能用它的hex值替換整個字元串。這樣標簽會以%3C%73%63%72%69%70%74%3E出 現。
另一方面,攻擊者可能使用web代理伺服器像Achilles會自動轉換一些特殊字元如換成%3E.這樣攻擊發生時,URL
中通常以hex等值代替角括弧。
下列正則表達式將檢測任何文本中包含的html的。它將捉住試圖使用、、或。這正則表達式應該忽略大小寫。我們需要同時檢測角括弧和它的hex等值(% 3C|
3.1 一般 CSS 攻擊的正則表達式
/((\%3C)|)/ix
解釋:
((\%3C)|) -檢查>或它的hex等值
Snort 規則:
alert
tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"NII
Cross-site scripting attempt"; flow:to_server,established;
pcre:"/((\%3C)|)/i"; classtype:Web-application-attack; sid:9000; rev:5;)
跨站腳本同樣可以使用技術。現行默認的snort規則可以被輕易避開。
3.2章節提供了防止這種技術的方法。
3.2 "
/((\%3C)|)/I
解釋:
(\%3 C)|) ->或它的hex等值
3.3 CSS 攻擊的極端的正則表達式
/((\%3C)|)/I
解釋:
這個規則簡單尋找。由於你的web伺服器和web應用程序的構架,這個規則可能產生一些錯誤。但它能保證捉住任何CCS或者類似CSS的攻擊。
一個不錯避開過濾的CSS方法請參考Bugtraq投稿的
http://www.securityfocus.com/archive/1/272...rchive/1/272037.
但是請注意最後一種極端的規則將能檢測這所有的攻擊。
總結:


這篇文章中,我們提出了不同種類的正則表達式規則來檢測SQL注入和跨站腳本攻擊。有些規則簡單而極端,一個潛在的攻擊都將提高警惕。但這些極端的規則可

能導致一些主動的錯誤。考慮到這點,我們修改了這些簡單的規則,利用了另外的樣式,他們可以檢查的更准確些。在這些網路應用成的攻擊檢測中,我們推薦將這
些作為調試你IDS或日誌分析方法的起點。再經過幾次修改後,在你對正常網交易部分的非惡意應答進行評估以後,你應該可以准備的檢測那些攻擊了。

⑹ 跨站腳本攻擊有哪些類型

1、持久型跨站:最直接的危害類型,跨站代碼存儲在伺服器(資料庫)。

2、非持久型跨站:反射型跨站腳本漏洞,最普遍的類型。用戶訪問伺服器-跨站鏈接-返回跨站代碼。

3、DOM跨站(DOM XSS):DOM(document object model文檔對象模型),客戶端腳本處理邏輯導致的安全問題。

(6)跨站腳本攻擊測試擴展閱讀:

跨站腳本攻擊產生的原因是網站過於相信用戶的輸入,那麼解決的辦法也很直接,就是從根本上不相信用戶的任何輸入。一個安全的網站應當對任何用戶的任何輸入都要進行檢查,特別是對用戶提交到伺服器中保存的數據,更要做篩選。

這種攻擊與反射型攻擊不同的是,它會把自己的攻擊代碼保存在網站的伺服器上,這樣,任何訪問了這個頁面的用戶,都會受到這個攻擊。

⑺ 如何防範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值&#xHH格式(或者命名的實體)對所有數據進行解碼以防止切換屬性。這條規則應用廣泛的原因是因為開發者常常讓屬性保持未引用,正確引用的屬性只能使用相應的引用進行解碼。未引用屬性可以被很多字元破壞,包括[space] % * + , - / ; < = > ^ 和 |。 ESAPI參考實施 String safe = ESAPI.encoder().encodeForHTMLAttribute( request.getParameter( "input" ) ); No.4 – 在向HTML JavaScript Data Values插入不可信數據前,進行JavaScript解碼 這條規則涉及在不同HTML元素上制定的JavaScript事件處理器。向這些事件處理器放置不可信數據的唯一安全位置就是「data value」。在這些小代碼塊放置不可信數據是相當危險的,因為很容易切換到執行環境,因此請小心使用。

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:741
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:1005
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:712
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:874
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:773
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1120
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:346
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:224
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:910
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:869