0

重複の可能性:
PHP で SQL インジェクションを停止する最良の方法

MySQL データベースを利用し、URL からフォームと変数を処理する PHP を使用して Web サイトを作成しています。変数は、SQL クエリ文字列を動的に構築するために使用されています。したがって、誰も SQL インジェクションなどを試みていないことを確認するための堅牢なソリューションが必要です。私の友人は、データベースへのアクセスにはストアド プロシージャのみを使用するべきだと言いましたが、私が使用しているホストはそうではありません。これらを許可しないでください。

これが私が使用しているコードです(DBコマンドをラップするクラスの一部です):

...
public function Sanitize($Variable)
{
    if(is_resource($this->ServerConnection))
    {
        $Variable = str_replace(";", "", $Variable);
        if(get_magic_quotes_gpc())
        {
            if(ini_get('magic_quotes_sybase'))
            {
                $Variable = str_replace("''", "'", $Variable);
            }
            else
            {
                $Variable = stripslashes($Variable);
            }
        }
        return mysql_real_escape_string($Variable, $this->ServerConnection);
    }
    else
    {
        $this->PrintError("The Sanitize function is not available as there is no server connection.");
    }
}
...

この関数は十分に堅牢ですか? 他に何かするべきですか?

4

2 に答える 2

2

この投稿を読む価値があるかもしれません。

于 2009-05-19T17:18:06.790 に答える
1

最善の方法は何ですか...

最善の方法はありません。それは文脈に依存します。

.. からの POST/GET 変数のサニタイズ

データが良いか悪いかというのは、間違った考え方です。データは単なるデータです。悪意があるかどうかは、使用されるコンテキストです。データベース サーバー上で無造作に実行すると、一部の単語が不適切になる場合があります。未成年者に見せてはダメな言葉もあります。それは文脈についてです。

于 2009-05-19T18:02:06.917 に答える