1

メインのindex.phpファイルをスケッチしました。これは、すべてのサイト要求のゲートウェイである必要があります。私がそれを望む理由は、クリーンなURLを持つためです。

ウェブサイトをモジュールに分割しました。(例:登録、記事など)

次に、.htaccessにいくつかの行を含めました。1つは次のとおりです。

RewriteRule ^([a-zA-Z0-9-]*)[/]?([a-zA-Z0-9-]*)[/]?([a-zA-Z0-9-]*)[/]?([a-zA-Z0-9-]*)[/]?([a-zA-Z0-9-]*)[/]?([a-zA-Z0-9-]*)[/]?([a-zA-Z0-9-]*)[/]?([a-zA-Z0-9-]*)[/]?([a-zA-Z0-9-]*)[/]?$ index.php?1=$1&2=$2&3=$3&4=$4&5=$5&6=$6&7=$7&8=$8&9=$9 [L,NC] 

これは、各「フォルダ」を正しい$_GET要素にマップするだけです...domain / 1 / hi / 3

$_GET['2'] == 'hi'; // TRUE

したがって、最初の$_GET要素に基づいてモジュールを実行したいと思います。このようにして、プロジェクトを整理しておくことができます。また、モジュールに関連付けられているすべてのファイルはそのフォルダー内にあります。

これが私のフォルダ構造です:

/
    modules/
        register/
            ajax/
                process.php
            register.php
        articles/
            articles.php
    index.php

そして、ここにすべてをマップするためのPHPコード(index.php)があります:

<?php

$basePath = 'modules';

for ($x = 1; $x <= 9; $x++) {
    if (preg_match('/[^a-zA-Z0-9-]/', $_GET[$x])) {
        require_once(__DIR__ . "/$basePath/404/404.php");
        die();
    }
}

$baseModule = $_GET['1'];

if (file_exists(__DIR__ . "/$basePath/$baseModule/$baseModule.php")) {
    require_once(__DIR__ . "/$basePath/$baseModule/$baseModule.php");
} else {
    require_once(__DIR__ . "/$basePath/404/404.php");
}

これは危険なコードですか?正規表現を実行する理由は、GETにが含まれていないことを確認するためです。または/../を実行するために使用できるため、サーバー上の実質的にすべてのファイルを実行できます。

これはまだセキュリティホール、潜在的なセキュリティホールを引き起こしますか、それとも実際には悪い習慣ですか?

この問題への最善のアプローチは何ですか?

4

3 に答える 3

1

はい、私にはそう思われます-インクルードインジェクションについて読んでください。安全でないファイルのアップロードなど、他の部分と組み合わせると、これは「殺す」ことさえあります。ここを参照してください。

__DIR__ . "/$basePath/$baseModule/$baseModule.php"
于 2012-10-24T22:13:11.440 に答える
0

配列内のすべてのオプションを定義することが最良の代替手段であると考えました。これは、in_array()を使用してコードを検証するときに、コードの速度に影響を与えなかったためです。攻撃を許可する可能性があるため、コードは安全ではありませんでした。セキュリティを突破できる方法は見つかりませんでしたが、それでも少し端があったと思います。

これが最良の選択肢だと思う理由は、Apacheが遅いからです。

この回答に賛成または反対に投票してください。最も多くの票を投じて回答を受け入れます。(とにかくこの答えを受け入れても評判は得られません。)

于 2012-10-25T14:22:39.723 に答える
0
RewriteRule ^/article/(.*)$ http://example.com/articles/articles.php

次に、article.phpで、URLセグメントを確認し、適切と思われる処理を行います。

@gschwaのアプローチもうまくいくでしょう。

于 2012-10-24T22:10:55.387 に答える