2011-04-27 43 views
1

在我的.htaccess文件中,當我進行更新時,我使用變量(SetEnv)來切換網站的開啓/關閉,是安全還是甚至可以通過PHP腳本修改.htaccess文件?在PHP中修改.htaccess文件是否安全?

更具體,我需要評論/取消註釋這些行:

#RewriteCond %{REMOTE_ADDR} !LOCALIPHERE 
#RewriteCond %{REQUEST_URI} !^/Site/maintenance.htm 
#RewriteCond %{REQUEST_URI} !^/Site/styles/style.css 
#RewriteCond %{REQUEST_URI} !^/Site/includes/jquery-1.4.4.min.js 
#RewriteCond %{REQUEST_URI} !\.(jpg|jpeg|png|gif|swf)$ 
#RewriteRule ^.* /Site/maintenance.htm [L] 

謝謝

編輯:

我的安全定義是:我想要知道如果PHP腳本打開.htaccess文件並且網站正在同一時間被訪問,網站將如何運作。

+1

您應該使用原子寫入,然後使用'file_put_contents(「。htaccess」,$ settings,LOCK_EX)'或者更好的方法'rename()'。所以Apache只會在完全寫入時重新讀取文件。 – mario 2011-04-27 14:00:21

+0

@mario +1,這裏有很棒的提示,同時也有非常不錯的信息。如果文件被鎖定,則所有連接都將處於掛起狀態,直到文件被釋放,因爲.htaccess文件必須在執行php之前進行。我對嗎? – Cybrix 2011-04-27 14:15:53

+1

請記住,您的新.htaccess必須是完美的。任何語法錯誤和您的整個站點都將死亡,因爲Apache'll會由於破壞中的錯誤指令而開始噴出500個內部錯誤.htaccess – 2011-04-27 14:16:42

回答

6

如果該文件可由PHP進程寫入,則可以像修改其他文件一樣對其進行修改。

但是,不要評論/取消註釋您的代碼,您應該使用RewriteCond檢查您的env var。

+0

偉大的解決方案。如果可能,我可以舉個簡單的例子嗎? – Cybrix 2011-04-27 13:57:22

+0

請參閱http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond - 「'%{ENV:variable}',其中變量可以是任何環境變量,也可用。通過Apache服務器進程通過內部Apache結構和(如果沒有找到)通過getenv()進行啓動。「 – ThiefMaster 2011-04-27 14:09:46

0

只要你知道,你在做什麼,它的安全。但是,如果您手動編輯文件並且不在腳本中反映這種情況,則很容易將其分解。

+0

我編輯了我的問題。我正在定義我所說的「安全」。 – Cybrix 2011-04-27 13:58:01

1

如果可靠的話,我會在考慮下考慮「安全修改」 - 而不會引入語法錯誤。爲了實現這個目標,我會建議您使用更具體的註釋標記:

#<off>#RewriteCond %{RE... 

這是更安全的掃描和使用簡單的字符串操作代替,從而減少對修改.htaccess文件導致500錯誤的可能性。如果您想要啓用/禁用不同類型的設置,請使用多個更具體的令牌。

關於安全本身,讓它們具有世界可寫性具有相同的含義,具有世界可寫的php腳本或配置文件。