复制代码代码如下:
<Directory "/usr/local/apache/htdocs"> Options Indexes FollowSymLinks AllowOverrride None Order allow,deny Allow from all </Directory>
清除Indexes后的样子: 复制代码代码如下:
<Directory "/usr/local/apache/htdocs"> Options FollowSymLinks AllowOverrride None Order allow,deny Allow from all </Directory>
你也可以保留Indexes指令,并用一个破折号引导,从而禁用此指令(也就是"-Indexes”)。 禁用符号连接追踪 如果你是唯一一个校对Web内容的人员,而你在创建新的符号连接时又几乎不犯错误,你可能不会担心此措施。不过,如果你有很多人员能够向你的站点增加内容,并非所有的人都像你一样谨慎从事,那么就会有一种风险,即某个用户可能偶然会创建一个符号连接指向你的文件系统的一部分,而你又确实不想让人们看到这些文件。例如,如果你的Apache服务器的根目录中的某人创建了一个指向 "/”文件夹的符号连接,你该怎么办? 为了取消Apache服务器允许用户追踪符号连接的请求,应该在Directory命令中清除FollowSymlinks指令。 例如,在笔者的试验性的Apache 2.2.4服务器中,Directory命令如下: 复制代码代码如下:
<Directory "/usr/local/apache/htdocs"> Options Indexes FollowSymLinks AllowOverrride None Order allow,deny Allow from all </Directory>
在清除了FollowSymLinks后,就成为如下的样子: 复制代码代码如下:
<Directory "/usr/local/apache/htdocs"> Options Indexes AllowOverrride None Order allow,deny Allow from all </Directory>
如果一些用户需要跟踪符号连接的能力,可以考虑使用SymLinksIfOwnerMatch代替。 Listen指令具体化 在你第一次安装Apache时,httpd.conf包含一个"Listen 80”指令。应将其改变为 "Listen mn.xx.yy.zz:80”,在这里"mn.xx.yy.zz”是你想让Apache监听其请求的IP地址。如果你的Apache运行在一个拥有多个IP地址的服务器上时,这一点尤其重要。如果你不采取预防措施,默认的"Listen 80”指令告诉Apache监听每一个IP地址的 80端口。 不过,这项措施有可能不适用于你的环境,应根据需要而定。 从httpd.conf中清除默认的注释 Apache 2.2.4中默认的httpd.conf文件有400多行。在这400行中,只有一小部分是实际的Apache指令,其余的仅是帮助用户如何恰当地在httpd.conf中放置指令的注释。根据笔者的经验,这些注释有时起负面作用,甚至将危险的指令留存于文件中。笔者在所管理的许多 Apache服务器上将httpd.conf文件复制为其它的文件,如httpd.conf.orig等,然后完全清除多余的注释。文件变得更加容易阅读,从而更好地解决了潜在的安全问题或者错误地配置文件。 没作任何设置前,查看web服务器请求文件头 HTTP/1.1 200 OK Date: Sun, 27 Apr 2008 11:56:46 GMT Server: Apache/2.2.8 (Unix) DAV/2 PHP/5.2.5 with Suhosin-Patch Last-Modified: Sat, 20 Nov 2004 20:16:24 GMT ETag: "387a5-2c-3e9564c23b600" Accept-Ranges: bytes Content-Length: 44 Content-Type: text/html 几乎把web服务器详细信息都暴出来了,如果没个版本的apache和php爆出严重漏洞,会给***者提供最有***价值的安全信息,这是非常危险的 将apache的配置文件加上两行 ServerTokens ProductOnly ServerSignature Off 重启apache让设置生效 再次发出apache头信息请求 HTTP/1.1 200 OK Date: Sun, 27 Apr 2008 11:57:40 GMT Server: Apache Last-Modified: Sat, 20 Nov 2004 20:16:24 GMT ETag: "387a5-2c-3e9564c23b600" Accept-Ranges: bytes Content-Length: 44 Content-Type: text/html 可以看到apache版本号于已经没有了 做到这点,我们还可以改变apache的版本,这就要修改apache的源代码了,在apache的源码包中找到ap_release.h 将#define AP_SERVER_BASEPRODUCT "Apache" 修改为#define AP_SERVER_BASEPRODUCT "Microsoft-IIS/5.0” 或者#define AP_SERVER_BASEPRODUCT "Microsoft-IIS/6.0” 然后找到os/unix下的os.h文件,将其#define PLATFORM "Unix"修改为#define PLATFORM "Win32" 然后重新编译,安装apache。 最后修改httpd.conf配置文件,添加两行ServerTokens Prod ServerSignature Off 在发送头请求,会有什么,就不用我说了吧,嘿嘿,这叫偷天换日,从这点来说,php也是一样,同样可以通过这种方式改变一些系统信息,不过根据GPL开源的精神,这样做貌似不太好,还是保留apache和php版权信息吧。 附: ServerSignature 三个选项 On|Off|EMai 主要起开关作用 ServerTokens 四个选项 Minimal|ProductOnly|OS|Full 四个选项隐藏信息依次增加 下面对php的配置文件php.ini进行配置 默认情况下expose_php = On 将其改为 expose_php = Off 为什么,可以看这段解释 ; Decides whether PHP may expose the fact that it is installed on the server ; (e.g. by adding its signature to the Web server header). It is no security ; threat in any way, but it makes it possible to determine whether you use PHP ; on your server or not. 然后禁止一些涉及php安全的函数 disable_functions = phpinfo, get_cfg_var //禁止phpinfo和get_cfg_var等函数 display_errors = Off //禁止爆出错误 allow_url_fopen = Off //这个关闭,就没有办法取远程内容了,但是可以用变通,用curl远程读取的方法做到 safe_mode = On //开启安全模式,这个开了,可能会有些php功能没办法使用了 无论如何,还是要我们的程序设计的完美,一般来说,单纯更具对系统***很难,如果是程序有漏洞,那***就简单了。