0

私はプラグインのようなものであるはずのいくつかのプロジェクトに取り組んでおり、私のウェブサイトのコアはそれらに API (ユーザー情報へのアクセスなど) を提供します。しかし今、私は 1 つの問題を解決しています。各プラグインは情報を保存するための独自のデータベース テーブルを持つ必要がありますが、これらのテーブル用のテンプレートは 1 つもないため、プラグインは独自の構造を持つ独自のテーブルを作成する必要があります。ここで私の問題は何ですか?

すべてのプラグインが作成したテーブルにのみアクセスできるようにする必要があります。これらのプラグイン テーブルは、特別な資格情報を持つ別のデータベースになります (そのため、「コア」テーブルにアクセスできません) が、他のプラグインのテーブルへのアクセスを回避するにはどうすればよいですか? 私の考えは次のとおりです。

  • 各プラグインには、一意のテーブル プレフィックス (非公開) があります。
  • プラグイン用のいくつかのクラスがあり、select、insert などのメソッドがあります。

私の考えを理解するための基本的な例を次に示します。

public function Select($fromTable, $selectWhat, $where) {
   $query = "SELECT " . $selectWhat . " FROM {unique_prefix}_" . $fromTable . " where " . $where . ";";
}

入力保護のない非常に単純な例です...そしてここで私の質問が来ます-別のプラグインへのアクセスを避けるためにそれを保護する方法は? 彼らがお互いの一意のプレフィックスを知らないとしましょう。$whereまたは、次のようなものとして渡すのを避ける方法は1 = 1; evil code here;? もちろん、これらのプラグインのアカウントには、SELECT、INSERT、DELETE、UPDATE の権限しかありません。アイデアをありがとう。

4

2 に答える 2

2

これが最善の解決策かどうかはわかりませんが、プラグインのテーブルへの許可のみを持つプラグインごとに個別の mysql ユーザーを作成できます (許可: http://dev.mysql.com/doc/refman/5.0/en /grant.html )。

おそらく、各プラグインのテーブルにある種の命名規則を適用し、関連付けられたユーザーの権限を自動的に設定するツールを作成する必要があるでしょう。

于 2013-08-12T07:15:33.947 に答える
1

PDO のような準備済みステートメントを使用してクエリを生成し、生の入力を渡さないでください。$where に何があるのか​​はわかりませんが、それでも数量限定のアイテムになります。したがって、次のようにします。配列内の各項目に対して、PDO ステートメントの一部を生成します。このようにして、正しいクエリが生成され、最も重要なことに、すべての「悪意のあるコード」が中和されます。

PDO 準備済みステートメント

于 2013-08-12T05:52:14.397 に答える