【问题标题】:scripts aren't run now that they are not in webroot, so how to run them and keep the private from the www脚本现在不在 webroot 中运行,所以如何运行它们并从 www 保持私有
【发布时间】:2013-01-25 19:10:01
【问题描述】:

我正在创建一个用户必须登录才能查看某些内容的网站。我通过将服务器根设置为C:\WAMP\www\public 并将用户必须登录才能查看的所有文件放在不同的目录(即C:\WAMP\www\private)中来实现这一点。如果私有目录不在网络服务器上,登录用户如何访问私有目录中的文件?通过要求。

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

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

解决方案:我感到困惑并编造了一个不存在的问题。可以通过将 HTML 文件存储在不在服务器根目录(也称为 Web 根目录,不管它叫什么)中并使用服务器根目录中的 PHP 文件包含它们来将 HTML 与 PHP 分开。由于 HTML 文件没有被解释(不是脚本),因此它可以工作。由于 PHP 文件由服务器解释,它们必须位于服务器根目录中,但由于它们被解释(并且源代码不只是提供给客户端),因此客户端无法看到程序的内部工作。如果其他人像我一样感到困惑,那么希望我能解释一下以解开他们的困惑。

【问题讨论】:

    标签: security webserver authentication


    【解决方案1】:

    你为什么不把你所有的私人内容都放在网络根目录里,然后在每个私人页面上做这样的事情;

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

    【讨论】:

    • 因为每个文件都需要包含 PHP,然后您就无法拥有任何纯 HTML 文件。虽然这可能是值得的。谢谢
    • @Celeritas:用户无法通过 HTTP 直接访问公共 html 文件夹之外的文件,因此您需要执行 Steve 建议的操作。但是,您的公共 HTML/PHP 文件可以读取您的私有/静态 HTML 文件(从您的私有文件夹)并将它们提供给客户端。
    • @Celeritas 您最好选择一种语言(/文件扩展名)并坚持下去。如果某个特定文件目前不需要任何实际的 PHP,无论如何。即使您尝试做的工作有效,也要考虑您的一个 HTML 文件后来最终需要一点 PHP 的可能性。你不仅要移动文件,而且你的 URL 正在改变(*.html -> *.php),现有的链接需要更新,如果你甚至控制它们等等。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-06
      • 2020-02-13
      • 2010-10-09
      • 2012-01-27
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多