2012-02-02 71 views
0

我使用通配符子域爲我們的每個用戶提供一個頁面username.domain.com。

註冊時,用戶名本身已經過正確的清理。

爲了簡化這個問題的目的,假設我有一個針對所有請求運行的PHP腳本。它獲取域組件使用...

$domain_components = explode('.', $_SERVER['SERVER_NAME']); 

...然後彈出tld,主域和子域。

問題是,我是否需要將$_SERVER['SERVER_NAME']變量的內容,特別是域組件視爲潛在的敵意?直覺上來說,我認爲不會,因爲PHP和Apache必須像我在做代碼之前做的那樣做得很好(並且this answer好像確認了它,因爲變量是在服務器控制之下的),但是我想確定我沒有忽略任何東西。

您是否知道通過$_SERVER['SERVER_NAME']發現的任何已知攻擊?

(我使用PHP 5.3.9和Apache 2.2.3。)

回答

0

我的理解是,$_SERVER變量由服務器構建的 - 除非你的服務器因此外部瀏覽器可以在不影響其內容損害。如果是這樣的話,$ _SERVER的內容是您最擔心的問題。

編輯

我的意思,除了那些採取的形式$_SERVER['HTTP...]補充。

+1

其中大部分都是。請記住,諸如$ _SERVER ['HTTP_USER_AGENT']'這樣的東西可以由客戶端修改。 – ceejayoz 2012-02-02 18:46:18

+1

謝謝。正如ceejayoz指出的那樣,許多在客戶端控制下的$ _SERVER變量並非如此。我在問題中提到的答案很好地闡述了這一點。 http://stackoverflow.com/a/6474936/123749 – Greg 2012-02-02 18:50:13

-1

你可以相信SERVER_NAME它設置由:

<VirtualHost *> 
ServerName server.domain.com 
ServerAlias server server2.domain.com server2 
# ... 
</VirtualHost> 
+0

這並非總是如此:https://stackoverflow.com/a/6474936/450127 – 2016-06-10 20:58:17

0

http://shiflett.org/blog/2006/mar/server-name-versus-http-host

似乎有一些風險,也有在該職位的一些提示,雖然它是舊的。在查詢中使用該變量(sanitized/escaped!)以查找合適的用戶以及該作品是否接受它可能沒有錯。在那之後你不再需要它了,所以只使用你的內部數據。

相關問題