1

SQLクエリのラッパーの例を次に示します。

public function where ($col, $val)
{
    if (!preg_match('~^[a-z0-9_]+$~i', $col))
        throw new Exception('Invalid parameter $col');

    $this->where.= "WEHERE $col = :$col";
}

正規表現はおそらくリソースを使用しているので、これはかなりやり過ぎですか。実際にこれを使用してPDOをラップしていることに注意してください(:$ colのコロンに注意してください)。

4

1 に答える 1

1

ユーザー入力で指定できる場合$col、これはやり過ぎではなく、 SQLインジェクションに対する唯一の防御策です。

安全であることがわかっている場合$col(たとえば、コードがswitchステートメントを使用してその値を生成する場合)、ランタイムチェックを含める価値はおそらくありません。ただし、プログラムが将来維持されるときに「既知の安全」ステータスが変更される可能性を考慮に入れる必要があります。

于 2012-08-03T11:49:22.807 に答える