跨網站指令碼

维基百科,自由的百科全书

跳转到: 导航, 搜索

跨網站指令碼Cross-site scripting,通常簡稱為XSS)是一種網站應用程式的安全漏洞攻擊,允許惡意使用者將程式碼注入到網頁上,其他使用者在觀看網頁時就會受到影響。這類攻擊通常包含了HTML以及使用者端腳本語言

目录

[编辑] 背景

網景最初推出JavaScript語言時,他們也察覺到准許網頁伺服器傳送可執行的程式碼給一個瀏覽器的安全風險(即使僅是在一個瀏覽器的sandbox裡)。它所造成的一個關鍵的問題在於使用者同時開啟多個瀏覽器視窗時,在某些例子裡,網頁裡的片斷程式碼被允許從另一個網頁物件取出資料,而因為惡意的網站可以用這個方法來嘗試竊取機密資訊,所以在某些情形,這應是完全被禁止的。為了解決這個問題,瀏覽器採用了與最初相同的決策──允許來自相同網域名稱系統和使用相同協定的物件網頁之間的任何互動。這樣一來,惡意的網站便無法藉由JavaScript在另一個瀏覽器竊取機密資料。此後,為了保護使用者免受惡意網站的危害,其他的瀏覽器與伺服端指令語言採用了類似的存取控制決策。一般而言,跨網站指令碼的漏洞常見於網頁允許攻擊者通過這些機制的弱點。由於發現了巧妙的注入惡意的指令碼到由其他網域服務的網頁方法,攻擊者可得到了更高的特權,竊取機密的網頁內容、會談的cookie、以及許多其他的物件

[编辑] 縮寫

Cross-site scripting的縮寫是CSS,但因為CSS已經被廣泛指層疊樣式表(Cascading Style Sheets),所以將第一個Cross以X縮寫。但早期的文件還是會使用CSS表示Cross-site scripting。

[编辑] 測試方法

通常有一些方式可以測試網站是否有正確處理特殊字元:

  • ><script>alert(document.cookie)</script>
  • ='><script>alert(document.cookie)</script>
  • <script>alert(document.cookie)</script>
  • <script>alert(vulnerable)</script>
  • %3Cscript%3Ealert('XSS')%3C/script%3E
  • <script>alert('XSS')</script>
  • <img src="javascript:alert('XSS')">

使用者可做一個網頁,試著用JavaScript把document.cookie當成參數丟過去,然後再把它記錄下來,但XSS攻擊方法不外乎只是這個。

[编辑] 實例

網路上的一些知名網站如Google、MySpace、Xuite以及無名小站等曾被發現到XSS漏洞。

[编辑] 避免的方法

[编辑] 程式設計方面

避免XSS的方法主要是將使用者所提供的內容進行過濾,許多語言都有提供對HTML的過濾:

  • PHPhtmlentities()或是htmlspecialchars()
  • Pythoncgi.escape()
  • ASPServer.HTMLEncode()

[编辑] 使用者方面

包括Internet ExplorerMozilla Firefox在內的常用瀏覽器皆有關閉JavaScript的功能,但關閉未必是最好的方法,許多網站都會使用JavaScript語言。

[编辑] 外部連結

个人工具