📄 security_tips.html
字号:
<p>大多数站点都选择这种方案,而不使用未指定为脚本的CGI。</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="dynamic" id="dynamic">其他动态内容的来源</a></h2>
<p>嵌入在Apache中作为模块运行的脚本解释器,比如:mod_php, mod_perl, mod_tcl, mod_python 将会使用和Apache一样的用户身份运行(参见<code class="directive"><a href="../mod/mpm_common.html#user">User</a></code>指令),所以被这些模块执行的脚本可能访问任何Apache服务器能够访问的对象。一些脚本引擎可能提供了某些方面的限制,但是最好在假定他们并不存在的前提下做好安全防护。</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="systemsettings" id="systemsettings">系统设置的保护</a></h2>
<p>为了得到真正严密的保护,应该禁止用户使用可能导致安全特性被覆盖的<code>.htaccess</code>文件,方法是在服务器配置文件中设置:</p>
<div class="example"><p><code>
<Directory /> <br />
AllowOverride None <br />
</Directory>
</code></p></div>
<p>使所有目录无法使用<code>.htaccess</code>文件,明确指定可以使用的目录除外。</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="protectserverfiles" id="protectserverfiles">默认配置下服务器文件的保护</a></h2>
<p>默认访问是偶尔会被误解的Apache特性之一。也就是,除非你采取措施,否则,如果服务器能够通过标准URL映射规则找到一个文件,那么就可能把它提供给客户端。比如下例:</p>
<div class="example"><p><code>
# cd /; ln -s / public_html <br />
Accessing <code>http://localhost/~root/</code>
</code></p></div>
<p>它会允许客户端遍历整个文件系统。其解决方法是,在服务器配置中增加下列指令:</p>
<div class="example"><p><code>
<Directory /> <br />
Order Deny,Allow <br />
Deny from all <br />
</Directory>
</code></p></div>
<p>这样,对文件系统的默认访问被禁止。而对需要访问的区域,可以增加正确的<code class="directive"><a href="../mod/core.html#directory">Directory</a></code>块,比如:</p>
<div class="example"><p><code>
<Directory /usr/users/*/public_html> <br />
Order Deny,Allow <br />
Allow from all <br />
</Directory> <br />
<Directory /usr/local/httpd> <br />
Order Deny,Allow <br />
Allow from all <br />
</Directory>
</code></p></div>
<p>必须特别注意<code class="directive"><a href="../mod/core.html#location">Location</a></code>和<code class="directive"><a href="../mod/core.html#directory">Directory</a></code>指令的相互作用,比如,即使<code><Directory /></code>拒绝访问,<code><Location /></code>指令仍然可能推翻其设置。</p>
<p>还必须留意<code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>指令,此设置如果类似"./",则与上述例子有相同的风险。如果你使用的是1.3或更高版本,我们强烈建议在服务器配置文件中包含以下指令:</p>
<div class="example"><p><code>
UserDir disabled root
</code></p></div>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="watchyourlogs" id="watchyourlogs">观察日志文件</a></h2>
<p>要了解服务器上发生了什么,就必须检查<a href="../logs.html">日志文件</a>。虽然日志文件只是记录已经发生的事件,但是它会让你知道服务器遭受的攻击,并帮助你判断是否提达到了必要的安全等级。</p>
<p>一些例子:</p>
<div class="example"><p><code>
grep -c "/jsp/source.jsp?/jsp/ /jsp/source.jsp??" access_log <br />
grep "client denied" error_log | tail -n 10
</code></p></div>
<p>上例会列出试图使用<a href="http://online.securityfocus.com/bid/4876/info/">Apache Tomcat Source.JSP Malformed Request Information Disclosure Vulnerability</a>的攻击次数。下例会列出最后十个被拒绝的客户端:</p>
<div class="example"><p><code>
[Thu Jul 11 17:18:39 2002] [error] [client foo.bar.com] client denied
by server configuration: /usr/local/apache/htdocs/.htpasswd
</code></p></div>
<p>可见,日志文件只是记录已经发生的事件,所以,如果客户端可以访问<code>.htpasswd</code>文件,而且在<a href="../logs.html#accesslog">访问日志</a>中发现类似如下的记录:</p>
<div class="example"><p><code>
foo.bar.com - - [12/Jul/2002:01:59:13 +0200] "GET /.htpasswd HTTP/1.1"
</code></p></div>
<p>这可能表示服务器配置文件中的下列指令已经被注解了:</p>
<div class="example"><p><code>
<Files ~ "^\.ht"> <br />
Order allow,deny <br />
Deny from all <br />
</Files>
</code></p></div>
</div></div>
<div id="footer">
<p class="apache">本文允许自由使用、分发、转载,但必须保留译者署名;详见:<a href="../translator_announcement.html#announcement">译者声明</a>。</p>
<p class="menu"><a href="../mod/index.html">模块索引</a> | <a href="../mod/directives.html">指令索引</a> | <a href="../faq/index.html">常见问题</a> | <a href="../glossary.html">词汇表</a> | <a href="../sitemap.html">站点导航</a></p></div>
</body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -