2011-12-07 10 views
3

私は挿入されたデータをmysqlクエリに入力する前にそれをフィルタリングするための2つのシンプルな関数を作成しました。フォームフィールドのためにこれはデータをフィルタリングしてSQLインジェクションやその他の攻撃を防ぐ安全な方法ですか?

(私も個別に各フィールドをチェックするために正規表現を使用しています

// Form filter 
function filter($var) 
{    

    // HTML is not allowed 
    $var = strip_tags(trim($var)); 

    // Check magic quotes and stripslashes 
    if(get_magic_quotes_gpc()) 
    { 
     $var = stripslashes($var); 
} 

    // Not using it right now, is it recommended? 
    // $var = htmlentities($var, ENT_QUOTES); 

    // Escape 
    $var = mysql_real_escape_string($var); 

    // Return  
    return $var; 
} 

次にURLに送信されたIDの()のために、私はこのフィルタを使用しています:。

// ID filter 
function idfilter($idfilter) 
{ 
// Delete everything except numbers 
$idfilter = ereg_replace("[^0-9]", "", $idfilter); 

// Round numbers 
$idfilter = round($idfilter); 

// Test if the input is indeed a number 
if(!is_numeric($idfilter) || $idfilter % 1 != 0) 
{ 
    $idfilter = 0; 
} 

// Filter using the formfilter (above) 
return filter($idfilter); 
} 

があります

答えて

3

廃止予定の機能をmagic_quotesereg_*として使用しています。 SQLインジェクションを防ぐためには、(を使用することをお勧めします)を使用し、XSSを防ぐためにstrip_tags()を使用する必要があります。

+0

ありがとう、私はそれを見ていきます! – mat

+0

+1ですが、[htmlspecialchars](http://www.php.net/manual/en/function.htmlspecialchars.php)を使用すると、HTMLコードのように表示され、解釈されないようにしたい場合や、もちろん剥奪すべきではありません。 –

+0

前述したように、正規表現の作業のために 'preg_ *'のために 'ereg_ *'をダンプします。 – Dan

2

文字列を連結する代わりにクエリのパラメータを使用してください。

フィルタやクリーナーは通常、十分安全ではありません。

+0

あなたの最初の行が何を意味するのか分かりません。 – mat

+0

これを見てください:http://stackoverflow.com/questions/60174/best-way-to-stop-sql-injection-in-php – idstam

1

あなたはidFilter()が安全に他の人のよう

function idfilter($idfilter) { 
    return (int)$idfilter; 
} 

にまで除去することができる整数のIDを使用している場合、パラメータ化クエリを使用すると、しかし行くための正しい方法で、示唆しています。

関連する問題