2012-01-06 107 views
3

我一直在尋找嘗試找到解決方案的地方。我最近在我們的網站上運行掃描,發現XSS和SQL注入的任何漏洞。一些項目已經引起了我的注意。PHP腳本中的XSS漏洞

用戶輸入的任何數據現在都使用filter_var()進行驗證和消毒。

現在我的問題是XSS和操縱URL的人。簡單的一個,這似乎是無處不在的是:

http://www.domainname.com/script.php/">< script>alert('xss');</script> 

這就改變了一些$_SERVER變量,導致我所有的相對路徑CSS,鏈接,圖片等。爲無效和頁面沒有按」 t正確加載。

我清理腳本中使用的任何變量,但我不知道如何避免在URL中刪除這些不需要的數據。

在此先感謝。

增加: 這進而導致在模板文件中一個簡單的鏈接:

<a href="anotherpage.php">Link</a> 

實際鏈接:

「http://www.domainname.com/script.php/」 > < script> alert('xss'); </SCRIPT> /anotherpage.php

+0

消毒用戶輸入;永遠不要相信它 – Adrian 2012-01-06 21:38:56

+0

我究竟在做什麼消毒,我沒有把這個輸入用於任何用途。如果它不是我想要的變量,我只想讓它忽略。 – cosmoba 2012-01-06 21:49:34

回答

0

爲了您對XSS的關注:除非您盲目使用相關的$ _SERVER變量,否則更改的URL將不會進入您的頁面。相對鏈接似乎包含URL注入腳本的事實是一種瀏覽器行爲,其風險只會破壞您的相關鏈接。由於您不會致盲$ _SERVER變量,因此您不必擔心。

爲了您關心您的相對路徑中斷:請勿使用相對路徑。引用至少一個域根路徑的所有資源(以斜線開頭),這種URL損壞不會按照您描述的方式破壞您的網站。

2

這就改變了一些$_SERVER變量,導致我所有的相對路徑CSS,鏈接,圖片等。爲無效和頁面無法正確加載。

這聽起來像是你在網站上犯了一個大錯誤,應該重新考慮如何將輸入中的鏈接信息注入到輸出中。

單獨過濾輸入在這裏沒有幫助,您也需要過濾輸出。

如果您的應用程序收到與允許的請求的超集不匹配的請求以返回404錯誤,通常情況下會更容易。

我不知道如何避免在URL中刪除這些不需要的數據。

實際上,請求已經發送,因此URL被設置。你不能「改變」它。這只是要求的信息。

現在是您的一部分來處理它,而不是盲目傳遞它,例如,到你的輸出(然後你的鏈接被打破)。


編輯:現在寫了具體是什麼,你關心的問題。我會在這裏與dqhendricks一起去:誰在乎?

如果你真的覺得與用戶只是利用她的瀏覽器,輸入她覺得沒有任何URL這樣做,好了,技術上是正確的響應的事實不舒服:

400錯誤請求(ref

而且沒有或只有完全合格的URI(絕對URI)或BASE-URI的重新定義返回一個頁面,否則瀏覽器將採取URI輸入到它的地址欄爲基地-URI。請參閱Uniform Resource Identifier (URI): Generic Syntax RFC 3986; Section 5. Reference Resolution­Specs

+0

我實際上並沒有在輸出中使用任何輸入。我不使用PHP_SELF或任何$ _SERVER變量。除非我的服務器配置中缺少某些東西。被調用的腳本確實存在,所以我不確定如何給出404錯誤。我修改了我的問題以顯示鏈接是如何修改的。 – cosmoba 2012-01-06 21:48:35

+0

@cosmoba:我編輯了答案。要了解如何讓腳本返回HTTP狀態代碼,請參閱http://php.net/header。 – hakre 2012-01-06 22:25:42

1

首先,如果有人添加廢話到他們的網址,誰在乎如果頁面不正確加載圖像?如果請求無效,爲什麼它會加載任何頁面?爲什麼你使用SERVER vars來獲取路徑呢?第二,你也應該逃避任何用戶提交的數據庫輸入,併爲你的特定數據庫使用適當的方法來避免sql注入。 filter_var通常不會有幫助。

第三,xss很容易防範。任何用戶提交的數據將顯示在任何頁面上都需要使用htmlspecialchars()進行轉義。如果您使用可以構建這個轉義的視圖類,則更容易確保。

+0

我沒有使用$ _SERVER vars來獲取任何路徑。我確實逃避了所有用戶提交的數據。 – cosmoba 2012-01-06 21:54:30

+0

@cosmoba你在你的文章中說過,「這會改變一些$ _SERVER變量,並導致我所有的CSS,鏈接,圖片等相對路徑無效,頁面加載不正確。」 $ _SERVER變量不應以任何方式影響相對路徑。 – dqhendricks 2012-01-09 18:43:54