由于脚本不在webroot中,因此不运行脚本,因此如何运行它们并保持私有不受www

时间:2013-02-08 22:56:15

标签: security webserver authentication

我正在建立一个用户必须登录才能查看某些内容的网站。我通过将服务器根目录设置为C:\WAMP\www\public并将用户必须登录的所有文件放在另一个目录(即C:\WAMP\www\private)中来完成此操作。如果登录用户不在Web服务器上,那么如何访问私有目录中的文件?通过要求。

<?php
session_start();
$destination = $_GET['d'];
if(isset($_SESSION['loggedInUser']))
    require '../private/'.$destination;
else
    require 'signinrequired.html';
?>

但是有一个问题。如果我需要一个脚本,那么它将不会被解释,因为它不在web根目录中(as explained in the answer here)。那么我该如何修复或完全重新设计系统呢?

解决方案:我感到困惑并构成了一个不存在的问题。通过将HTML文件存储在服务器根目录(也就是web根目录,无论它叫什么)中,并使用服务器根目录中的PHP文件包含它们,可以将HTML与PHP分开。由于HTML文件不被解释(不是脚本),这是有效的。由于PHP文件由服务器解释,因此它们必须位于服务器根目录中,但由于它们被解释(并且源代码不仅仅被提供给客户端),因此客户端无法看到程序的工作。如果其他人以某种方式让我感到困惑,那么我希望我能解释一下它们。

2 个答案:

答案 0 :(得分:2)

为什么不在网络根目录中拥有所有私人内容,并在每个私人网页上执行此类操作;

<?php 
   if(!$logged_in){ header("Location:restricted.php"); exit;}
?>

答案 1 :(得分:0)

作为一种快速而肮脏的解决方案,您可以使用.htpasswd和Apache别名的组合。作为一种解决方案,这不是很可扩展 - 你必须手动维护一个用户名列表,并为你用明文发送的密码创建一个密码。比如,内部文档存储库很好。

如果您想要更具动态性和可扩展性的东西,那么无论您做什么,您当前的方法都将提供非常弱的保护。你可以选择Symfony's security bundle,甚至使用像Drupal这样的CMS。