【发布时间】:2014-01-18 21:52:15
【问题描述】:
我前段时间建立了一个网站,其中包含一个公共区域和一个私人区域。私人区域在包含敏感信息的相关目录上使用 .htaccess 密码保护。
一切都经过了彻底的测试并且运行良好,直到最近的某个时候,我注意到数据可以免费提供给全世界,无需任何用户名和密码。这些数据不是核导弹的发射代码,但它仍然是我希望仅限授权用户使用的机密数据。
我联系了网络托管公司,并得到了关于密码保护不起作用的两个假设原因。我很难接受他们的理由,因为它曾经完美地工作过。
他们首先声称我的 .htaccess 文件无效。因此,他们创建了一个新的,但它同样没有阻止访问。我原来的 .htaccess 文件在下面。
他们接下来声称这是因为我的 index.html 文件包含 javascript。它调用了两个 javascript 文件。第一个(如下)只是简单地对 CSS 文件的调用进行了 document.write。第二个(下)做了一个搜索表单和下拉菜单的document.writes。包括 index.html 在内的每个 html 文件都调用了这两个脚本。
当他们的 .htaccess 修改版本没有帮助时,他们证明了他们的第一次诊断是错误的。 (这只是我代码的最后 4 行)。所以问题是 .htaccess 密码保护是否可以简单地通过包含一些将菜单写入屏幕的琐碎 javascript 来破坏,如果是这样,那么在网络上的哪个文档记录?
可以想象,javascript 可能会影响下拉菜单中项目的安全性,但建议位于受保护目录中的 index.html 本身突然变得无需密码即可访问,仅仅是因为它包含写出菜单的javascript。
这是我原来的 .htaccess 文件:
Options -Indexes
AddHandler x-httpd-php .html .htm
<Files .htaccess>
Order Allow,Deny
Deny from all
</Files>
<Files index.html>
AuthUserFile "/home/xxxxxxxx/.htpasswds/public_html/private/passwd"
AuthName "private"
</Files>
这是我的 index.html 的开始:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>xxxxxxxx Private Area</title>
<script type="text/javascript" src="header1.js"></script>
</head>
<body onload="document.searchbox.query.focus()">
<div class="page">
<script type="text/javascript" src="header2.js"></script>
这是 header1.js:
document.write('<link href="../menus.css" rel="stylesheet" type="text/css" />');
document.write('<!--[if lt IE 7]>');
document.write('<style type="text/css" media="screen">');
document.write('body{behavior:url(csshover.htc);}');
document.write('</style>');
document.write('<![endif]-->');
这是 header2.js 的开始(为了保护无辜,有些行被遮住了):
document.write(' <form action="sphider29/search.php" method="get" name="searchbox" target="_blank">');
document.write(' <table align="right">');
document.write(' <tr>');
document.write(' <td align="center">');
document.write(' <input type="text" name="query" id="query" size="25" value="" />');
document.write(' </td>');
document.write(' <td align="center">');
document.write(' <input type="hidden" name="search" value="1" />');
document.write(' <input type="submit" class="sbmt" value="Site Search" />');
document.write(' </tr>');
document.write(' </table>');
document.write(' <div align="center">');
document.write(' <input type="hidden" name="media_only" value="0" />');
document.write(' <input type="hidden" name="db" value="0" />');
document.write(' <input type="hidden" name="prefix" value="0" /> <br />');
document.write(' </div>');
document.write(' </form>');
document.write('<div style="position: absolute; left: 10px; top: 70px; width: 960px; height: 40px;">');
document.write('<ul class="menuH decor1">');
document.write(' <li style="margin-left:70px;"><a href="../">Home</a>');
document.write(' <li> <a class="parent">xxxxx</a>');
document.write(' <ul>');
document.write(' <li><a class="parent">xxxxxxxxx</a>');
document.write(' <ul>');
document.write(' <li><a href="xxxxxxxxxxxx.pdf" target="_blank">yyyy</a></li>');
document.write(' <li><a href="xxxxxxxxxxxxx.pdf" target="_blank">yyyy</a></li>');
document.write(' <li><a href="xxxxxxxxxx.pdf" target="_blank">yyyy</a></li>');
document.write(' <li><a href="xxxxxxxxxxx.pdf" target="_blank">yyyy</a></li>');
document.write(' <li><a href="xxxxxxxxxxxx.pdf" target="_blank">yyyy</a></li>');
如果问题是 Javascript,那么如果我摆脱它并在 PHP 中使用包含菜单代码的 PHP 来完成这一切,是否可以解决问题?
【问题讨论】:
-
自 1998 年以来,我还没有看到任何人使用 document.write()。您可能需要重新考虑一下您是如何做到这一切的。
-
您的托管公司在骗您。得到一个更好的。
-
所以问题是 .htaccess 密码保护是否可以通过包含一些将菜单写入屏幕的琐碎 javascript 来破坏? -- 否 .
-
有点跑题了,但是你为什么需要这两个 JavaScript 文件呢?它们看起来完全没用。
-
暴露的数据是什么?这些 pdf 文件是否应该无法访问?
标签: javascript php apache .htaccess