0

何年にもわたって作成したさまざまなPHPログインシステムで、ページを保護するためのさまざまな方法を試しました。

私は常に.htaccessを使用します。これは、すべてのリクエストをindex.phpにルーティングします。ただし、特定のページのアドレスを直接入力すると(知っている場合)、ロードされます。これは明らかに安全性が低くなります。

1つのサーバーで、すべての「保護された」ページをpublic_htmlの外に配置しようとしました。これはうまくいきました。これは、「folder / products/product.php」に移動できなくなったことを意味します。素晴らしい!つまり、そのページへのすべてのリクエストをインクルードに入れて、そのページを表示するユーザーを完全に制御できるということです。

httpdocsしかし、別のサーバーで問題が発生しました。基本的に、フォルダー外のものにアクセスできません。厳密には真実ではありませんが、FastCGIサポートをオンにしてアクセスできますが、セッション書き込みエラーが発生します。それをオフにし、ApacheモジュールとしてPHPをオンにすると、が得られbasedir restrictionsます。

わかった。では、ページに自分だけがアクセスできることをどのように確認できますか?パブリックフォルダにあるとしても?そこに入れることができるある種の.htaccessがありますか?それは外部からの誰かがそれにアクセスするのを防ぎますか?または、すべてのフォルダーにパスワードを設定した場合、パスワードは機能しますか?それは、ファイルを含めることができることを意味しますか?

私は本当にこれに関する良い最終的な解決策が必要です。すべてのサーバーで機能するものであり、発生していることを確認できる唯一の方法は、すべてをパブリックフォルダー内に保持することです。

4

2 に答える 2

2

.htaccessディレクトリとそのすべてのサブディレクトリへのアクセスを禁止する場合は、を追加できますdeny from all。これが「より深い」htaccessファイルによって上書きされない限り、それで十分です。

また、「大きな」フレームワークがコードをどのように構成しているかを確認することもできます。(例えば、symfony、zendなど)。

参考文献:

于 2013-03-27T08:49:10.830 に答える
1

1つのアプローチは、次のようなことを行うことです。基本的に、トップレベルのスクリプトとして実行することを禁止します。

提供する予定のすべてのエンドポイントで、最初に行うこととして、グローバルフラグを設定します。

<?php
$GLOBALS['INSIDE_AN_ENDPOINT'] = true;

次に、各インクルードファイルで、続行する前にフラグが設定されていることを確認してください。

<?php
if (!isset($GLOBALS['INSIDE_AN_ENDPOINT'])) { header('Status: 403 Forbidden'); exit; }
于 2013-03-27T08:39:16.207 に答える