用了ThinkPHP框架一段时间后,感觉这是一个挺爽的PHP框架,用着舒服,但了解深入一点之后,感觉在安全性方面还有一点事情要做做。

对于ThinkPHP框架,他有固定的文件目录和一些固定的文件名称,所以,对于一个应用,有很多文件名称和目录是可以猜测出来的,这样我们就可以通过该文件的URL直接访问,绕过了ThinkPHP框架的访问模式,特别是在Tpl目录和Lib目录,这两个地方都是关键地方,如何才能阻止直接对这几个目录进行访问呢?我用到的方法是Apache服务器的Rewrite。

首先,在http.conf配置文件中启用和配置好Rewrite模块。在该文件中增加如下配置信息:

(1)LoadModule rewrite_module Modules/mod_rewrite.so

(2)注意<Directory />配置字段中的AllowOverride和Options,我配置的如下:
<Directory />
AllowOverride FileInfo
Options FollowSymLinks
Order allow,deny
Allow from all
</Directory>

然后,在Lib目录新建一个.htaccess的文件,内容如下:
RewriteEngine on
RewriteRule ^(.*)$ /index.php
将对该目录的所有访问转到项目的启动文件上,从而屏蔽掉对该目录的访问。

对于Tpl目录设置有点不同,因为该目录还存放其他文件,比如图片文件(*.jpg)等,而我们要阻止的仅仅是html文件的访问,所有在default目录下新建的.htaccess文件中的内容如下:
RewriteEngine on
RewriteRule ^(.*\.html)$ \index.php [NC]
将对该目录下所有html文件的访问转到项目的启动文件上,对于其他文件不变。

上面只是我的一些测试方法,对于这两个目录的安全性是不是真有问题,也还得进一步验证,权且当作是对Rewrite的一次练习吧。