2009-05-19 22 views
-1

可能性の重複:
Best way to stop SQL Injection in PHPフォーム/ URLからPOST/GET変数をサニタイズする最も良い方法は?

私はMySQLデータベースを使用すると、URLからフォームと変数を扱うPHPを使用してウェブサイトを作成しています。変数は、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."); 
    } 
} 
... 

ですか?私は他の何かをしなければならないのですか?

+1

なぜパラメータ化クエリを使用していませんか? – dave4420

+0

パラメータ化されたクエリとは何ですか?そのメリットは何ですか?たぶん私は、私は非常に長い間、SQLデータベースをオンラインで使用していないことを明らかにすべきです。 –

+1

パラメータ化されたクエリを実行する場合は、PDOをチェックしてください。 http://php.net/pdo – rojoca

答えて

2

読む価値がありますthis postです。最善の方法は何

1

...

には最良の方法はありません。それは文脈によって異なります。 POSTを消毒

.. /から変数をGET ..

これは、データが良いか悪いかであることを考えるの欠陥モードです。データは単なるデータです。悪意のあるものであるかどうかは、それが使用されるコンテキストです。あなたがデータベースサーバ上でそれを実行しないと、いくつかの単語が悪いかもしれません。あなたが未成年者に表示すると、いくつかの言葉が悪いです。それは文脈に関するものです。

関連する問題