2011-01-06 18 views
0

への.phpで終わるすべてのURLをリダイレクト私はこれまでのところ、次のように私の.htaccessを設定している:htaccessファイルは、インデックス

RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?page=$1 [QSA] 

私のindex.phpは例えば、ページ/からファイルをロードします。 index.php?page = homeはページ/ home.phpからページコンテンツを読み込みます

しかし、誰かがページ/ home.phpに行った場合、ページはヘッダーなしなどで読み込まれます。これは望ましくありません。 .phpで終わる任意のURLをホームページにリダイレクトするために追加することはできますか? ^(.*)\.php$用に別のRewriteRuleが(ファイルなしの状態が存在する)動作するはず

おかげ

+2

ページディレクトリにある.htacessの 'Deny From All'はすぐにあなたの問題を解決します –

+0

私はむしろこのコードにインクルードインジェクションを恐れているでしょう... –

+0

Deny from All - それはトリックを行っている。あなたが注射を含めると言う - より具体的なことができますか?ありがとう – Freddie

答えて

1

。しかし、なぜ人々は.phpに直接アクセスしようとしていますか?正当な理由がない場合は、ディレクトリ内のDenyがおそらくより良い方法です。

(そして、@colシュラプネルのコメントとして、注入、注意してください、私はあなたもあなたのページ名をフィルタリングしている願っています。。。)

編集:注入が含まれる:誰かがあなたに興味深いページ名を与えた場合に何が起こるかを考えてみましょう、page=http://foo.com/exploitのように、あなたのスクリプトはそれを実行するのだろうか? page=/etc/passwdまたはpage=/../../../etc/passwdについては、パスワードファイルを印刷しますか? page=`mysqldump …`、データベースのコピーを提供しますか?セキュリティのヒント上記

RewriteCond %{REQUEST_URI} \.php$ 
RewriteRule ^(.*/)?([^/]*)\.php$ /index.php?page=$2 [R=301,L] 

注:

+0

私はすべてから拒否して問題を解決しました。ありがとう – Freddie

+0

@include injection編集:ああ、私はbasename()とfile_exists()の使用をカバーしています。いずれかのSQLインジェクションのチャンスはありません:) 助けてくれてありがとう – Freddie

0

これはpages/anything.phpindex.php?page=anythingにリダイレクトする必要があります。インクルードインジェクションが悪い...