2011-04-27 54 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脚本或配置文件。