【发布时间】:2014-04-13 13:02:20
【问题描述】:
我知道这个问题已经被问过很多次了,但我还是迷路了!
我有一个在 Apache 服务器内部托管的网站项目 (php)。该网站与主页一起加载。主页包含一个login 链接。当用户单击login 时,.htm 页面将在一个单独的选项卡中打开,该选项卡托管在 IIS 中的另一台服务器(外包)上。我想防止用户直接在地址栏中输入login页面的URL。相反,用户应该始终通过项目主页导航到login 页面。
我理解的唯一解决方法是通过htaccess 文件。当页面在同一台服务器上时,这有效。但是,在 IIS 上没有 htaccess 文件。
另一个解决方案是在单击login 时执行http post variable。如果变量存在(通过主页访问),则应加载登录页面,否则应将用户重定向到主页(如果直接输入登录 URL)。但是,我可以发布一个变量,但我不明白在哪里进行调用以加载适当的页面。以下用于发布变量:
<ul>
<li><form id="loginForm" name="loginForm" method="post" action="redirectTest.php">
<input type="hidden" name="total" id="total" value="">
<a href="#" onclick="setValue();">Login</a>
</form></li>
<script type="text/javascript">
function setValue(){
document.sampleForm.total.value = 100;
document.forms["loginForm"].submit();
}
</script>
redirectTest.php 目前为空,因为我不确定如何进行相应的重定向。
编辑:例如,我的网站是 www.abc.com,登录页面是 www.xyz.com/login.htm。如何判断是通过 www.abc.com 路由还是直接输入地址栏的 URL?
【问题讨论】:
-
什么是“
.htm页面”? -
如果我正确理解您的问题,使用后置变量的方法不是可靠的预防策略。只是因为它很容易被伪造。如果我没看错,如果请求不携带来自您的其他站点的引用标头,您希望阻止访问该 IIS http 服务器提供的单个“页面”。如果是这样,那么当请求提供“登录页面”时,您必须在 IIS http 服务器上测试该标头。如果设置了标头,则可以,如果没有,则阻止访问或将重定向标头返回到该其他站点。
-
@arkascha 出于兼容性目的,
html也缩写为htm。关于test for that header on the IIS http server when it is requested to deliver the "login page",能否请您解释一下这个header的位置以及要进行什么样的验证测试? -
这是一个普通的http头浏览器在跟随链接而不是加载直接输入的url时添加到请求中。它被记录在案。它包含保存链接的页面的 url,即“用户来自的页面”。它作为服务器端请求的一部分提供,PHP 在其
$_SERVER超全局变量中提供它作为元素HTTP_REFERRER,这也被记录在案。它也可以由 http 服务器本身进行评估,尽管我无法帮助您。就像这里可能 99% 的使用一样,我对 IIS 的经验非常有限,它只是一个罕见的、异国情调的 http 服务器。
标签: php apache .htaccess iis redirect