2012-02-14 2 views
112

によってフォルダやファイルへの直接アクセスを拒否することはシナリオです:ここでのhtaccess

  • は、いくつかのファイルがincludesフォルダにあるindex.phpに含まれている
  • ルートフォルダにindex.phpファイルがあります。
  • その他のファイル(submit.php)は、フォーム送信アクションのルートフォルダにあります。

htaccessによってincludesフォルダーにあるファイルへの直接ユーザーアクセスを制限したいと思います。 submit.phpも同様です。しかしインクルードはindex.phpファイルのために働くでしょう。 同様に、ユーザーがwww.domain.com/includes/somepage.phpを入力すると、それが制限されます(エラーページにリダイレクトされる可能性があります)。

答えて

228

私は、ウェブルートのうち、includesフォルダを移動するだろうが、あなたは全体のincludesフォルダへの直接のアクセスをブロックしたい場合は、あなただけが含まれ、そのフォルダに.htaccessファイルを置くことができます。

deny from all 

あなたはそのフォルダからファイルを開くことはできませんが、あなたは問題なくPHPにそれらを含めることができます。

+4

他のファイルは、そのフォルダにあるファイルにajax要求を行うことができますか? –

+13

@ChaitanyaChandurkarいいえ、ajaxリクエストは通常​​のhttpリクエストであるため、拒否されます。 – jeroen

+0

Sr b/c I新しいWebプログラミング。ファイルindex.phpにアクセスするための例外を追加するにはどうしたらいいですか? – PhatHV

8

私が正しく理解しているだけで、インクルードフォルダへのアクセスを拒否したいのですか?

「DENY FROM ALL」ディレクティブがインクルードフォルダに置かれている.htaccessは、このトリックを行います。

44

これは純粋mod_rewriteベースのソリューションです:URIは、どちらかが含まれ/includes/または/submit.php

+3

提出ファイルに対処してもいい仕事 –

8

あなたのQは2つの部分、両方のイェルーンに来て、anubhavaのソリューションは、のために働く場合、これは使用する禁断のエラーが表示されます

RewriteRule ^(includes/|submit\.php) - [F,L,NC] 

パートI -/includesへのアクセスを拒否する。 anubhavaはパートIIでも動作します。とにかく私はDOCROOT/.htaccessを使用しているので、後者を好んでおり、これはすべてのそのような制御を1つのファイルに保持します。

しかし、私が議論したいことは、「submit.phpへのアクセスを拒否する」という概念です。 submit.phpを使用したくない場合は、なぜDOCROOTに入れるのですか?私は、ここでの答えは、あなたがいくつかのフォームでアクションターゲットとしてそれを使用し、フォームが提出されたときにそれが発動されることを望んでいるということです。スパンボットから

これが当てはまる場合、anubhavaのパートIIを使用することはできません。フォームが失敗するためです。 あなたはここで行うことができますすることはリファラは、独自のインデックスページだったことを確実にするために.htaccessチェックして(i)は:

RewriteCond %{HTTP_REFERRER} !=HTTP://www.domain.com/index.php [NC] 
RewriteRule ^submit\.php$ -         [F] 

と、(ii)PHPのindex.phpのフォームジェネレータ内のためのいくつかの隠しフィールドを含めますタイムスタンプと検証。検証は、例えば、タイムスタンプのMD5の最初の10文字と内部秘密である可能性があります。送信を処理する際には、(i)タイムスタンプと検証の一致、(ii)タイムスタンプが現在の時刻の15分以内であることを検証できます。

これは、スパマーが有効なタイムスタンプ/検証ペアを取得してフォームを解析する唯一の現実的な方法としてスパムを防止することができますが、このスクレイプは15分の寿命になります。上位ディレクトリを含む基本的な認証を定義したとき、私はこれに走った

Satisfy all 
Order deny,allow 
Deny from all 

5

高いレベルで設定可能な他のオプションに応じて、あなたのディレクトリを含んでいるであなたの.htaccessファイルに次のように配置する必要があるかもしれません

Satisfy any 

これは、ユーザーが認証されたためにすべてからの私の拒否を防止していました。

18

それがアクセス可能なファイルを設定するには、再度次にそれを使用して、ファイルのディレクティブを使用して、すべてのファイルへのアクセスを禁止することが可能です:

<Files ~ "^.*"> 
    Deny from all 
</Files> 

<Files ~ "^index\.php|css|js|.*\.png|.*\.jpg|.*\.gif"> 
    Allow from all 
</Files> 
+3

質問を投稿した人が自分の問題が解決したかどうかはわかりませんが、これは複数の回答が多くのメンバーを助けることができるSOの美しさです。この最後の答えは私の問題を解決しました。 サイトにCSSファイルがありますが、ttfやotfフォントにアクセスできないようにしたい、ブーム!解決されました。 –

+0

これ以降、サブフォルダ内のファイルにアクセスすることはできません –

8

1溶液ベースライナーmod_alias:

RedirectMatch 403 ^/folder/file.php$ 

をこれは/folder/file.phpの禁止されたエラーを表示します

+1

+1 - 正規表現 '^ folder'を使用して** 404 **をフォルダ全体に適用すると、誰もファイルが存在しないことを知ることができるので、 。 – bytecode77

関連する問題