0

ユーザーが特定のコンテンツを表示するためにログインする必要がある Web サイトを作成しています。これを実現するには、サーバー ルートを に設定し、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 ルートにないため解釈されません (こちらの回答で説明されているように)。では、これを修正するか、システムを完全に再設計するにはどうすればよいでしょうか?

解決策: 混乱して、存在しない問題をでっち上げました。HTML ファイルをサーバー ルート (別名 Web ルート) 以外に保存し、サーバー ルートにある PHP ファイルを使用してそれらを含めることにより、HTML を PHP から分離することができます。HTML ファイルは解釈されない (スクリプトではない) ため、これは機能します。PHP ファイルはサーバーによって解釈されるため、サーバーのルートにある必要がありますが、解釈される (そしてソース コードがクライアントに提供されるだけではない) ため、クライアントはプログラムの内部構造を見ることができません。他の誰かが私と同じようにどういうわけか混乱した場合は、うまくいけば、彼らを解き放つために少し説明しました.

4

2 に答える 2

2

すべてのプライベート コンテンツを Web ルート内に配置し、各プライベート ページでこのようなことをしないのはなぜですか。

<?php 
   if(!$logged_in){ header("Location:restricted.php"); exit;}
?>
于 2013-02-08T23:29:05.660 に答える
0

手っ取り早いソリューションとして、.htpasswdと Apache エイリアスを組み合わせて使用​​できます。解決策として、これはあまりスケーラブルではありません。ユーザー名のリストを手動で維持し、平文で送信するパスワードを作成する必要があります。たとえば、社内のドキュメント リポジトリに適しています。

より動的でスケーラブルなものが必要な場合、現在のアプローチでは、何をしても保護が非常に弱くなります。たとえば、Symfony のセキュリティ バンドルに参加するか、Drupal のような CMS を使用することをお勧めします。

于 2013-02-10T10:24:24.533 に答える