2014-06-13 103 views
0

我有一種情況,我想保護一個文件免受公共訪問,但啓用從PHP讀寫。該文件包含密碼等敏感信息。保護web根目錄下的文件,但給php php訪問

的問題是,

  • 我不能把Web根目錄以外的文件(服務器安全限制從PHP訪問)
  • 我想避免mysql數據庫。

此外,我會盡量避免.htacess文件。

所以,如果我做一個文件夾,說private,在Web根目錄,並做

chmod 700 private 

然後,如果要保護的文件是private/data,我做

chmod 700 private/file 

將這個是一個安全的設置?因此,現在我可以從php讀取和寫入文件,但公衆無法訪問它?

這是一個安全的設置?

+0

如果這就像一個配置文件,你不應該允許從PHP寫入它。這就是你在臨時文件或數據庫中存儲的某種東西,它已經過清理。 – VikingBlooded

+2

我強烈建議您將此文件放在webroot之外。如果因爲其他安全措施而無法離開webroot,則需要打人,因爲這實際上使您的應用程序無法安全。 – Halcyon

回答

2

PHP以與web服務器相同的用戶身份運行,因此如果PHP可以讀取它,那麼您的web服務器也可以(反之亦然)。

如果您不想使用.htaccess還有另一個訣竅:將文件另存爲.php文件。即使有人從網上訪問文件,他們也無法看到源文件,他們可能只是得到一個白頁,或者可能錯誤取決於文件中的確切內容。

+0

感謝您的回答,但是您是否可以不用'curl'下載'.php'文件,或者'curl'在另一個用戶下運行? –

+0

如果你通過網絡服務器訪問文件,它會給你輸出,而不是源。 – Halcyon

1

如果您正在運行suPHP或fastCGI php,您可以使用類似於您所描述的設置來限制對文件的訪問。否則,PHP將使用與Web服務器相同的用戶,並且PHP可以訪問的任何文件也可以通過url訪問。

+0

感謝您的答案..但我不知道我明白這個文件可以通過URL訪問..這意味着在實踐中,在webroot中的任何文件權限被忽略?因此,webroot中的所有文件都可以被任何人忽略文件權限? –

+0

不管文件權限用於Web服務器進程運行的任何用戶的上下文中。在典型的PHP設置中,php用戶與Web服務器用戶相同。因此,如果文件可以訪問php,它也可以訪問Web服務器 - 這意味着您可以通過其相對於Web根目錄的路徑訪問該文件。 –

1

如果想要保持規定的限制(這很奇怪),並且(我猜)你不希望/有權訪問apache配置指令,可以考慮將PHP添加到某個組中,並且只給予組的權限文件,即。 apache無法讀取(如果它不在root/wheel中)。

或者使其成爲一個有效的.php文件(所以只有在php文件被請求時纔會調用)當php調用時不會返回任何內容或重定向。或者只是密碼。

+0

謝謝,聽起來像個好主意。那麼現在我怎麼知道php會屬於一個給定的組? –