2011-09-19 10 views
0

getsの注射攻撃などからデータベースを保護するために、次の関数を使用しています。入力変数をエスケープするPHP

function filter($data) { 
    global $db; 
    $data = trim(htmlentities(strip_tags($data))); 
    if (get_magic_quotes_gpc()) 
     $data = stripslashes($data); 

    $data = $db->real_escape_string($data); 

    return $data; 
} 

foreach($_GET as $key => $value) { 
    $data[$key] = filter($value); 
} 

質問は、私があまりにも$_GETしかし$_POSTないだけをフィルタリングする、です。どうやってするか?

フィルタリング後に$_GETまたは$_POSTに値を再割り当てすることはできますか?私はあなたがそれらをエスケープする必要がある時にそれらをエスケープ、

答えて

6

はあなたの変数を事前にエスケープしないでください。.. $_GET[$key] = filter($value);の代わり$data[$key] = filter($value);を意味します。

  • あなたが途中であなたの変数をエスケープする場合は、エスケープされている変数を知っていない、とあなたが
  • 後にそれらを文字列操作を行う前に、あなたの変数をエスケープ解除、および再脱出する必要があります
  • ないんよ
  • さまざまなソース(API、ファイル、データベースなど)からの変数はエスケープされません。あなたはそれらを逃れることを忘れてしまいます。
  • あなたはそれらを印刷する前にすべての変数をエスケープする必要があります(\ 'は印刷したくありません)
  • 可能な状況ごとに変数をエスケープすることはできません。 escapeshellcmdでエスケープするのはどうですか?

PHPはこれまでこれを行っていました。それはmagic_quotes_gpcと呼ばれました。

しかし、bad practiceのようになりました。現在は非推奨となっており、PHPの次のバージョンから削除されます。

必要なときにすべてをエスケープする方が良いでしょう。変数を出力しますか?それをエスケープする。すでに逃げ切っているかどうかを覚えておく必要はありません。そうではありません。

+1

スーパーグローバルを上書きすることも悪い習慣です。 –

+0

アドバイスのためにThx非常に –

0
array_walk($_GET,'filter'); 
array_walk($_POST,'filter'); 
array_walk($_COOKIE,'filter'); 
+0

もう少し説明してください。このコードはどこにある必要がありますか? –

+0

あなたはどこにでも、あなたの設定ファイルに置くことができます。この関数が解析されると、_GET _POST _COOKIE配列の各要素に対して、定義したフィルタ関数が実行されます。 php.net/array_walk – sathia

+1

@Tural NOWHERE。 –

-1

$キーも後でクエリで使用する場合にフィルタリングする必要がありますが、可能であればmysqlプリペアドステートメントとバインド変数を使用する必要があります。

http://www.ultramegatech.com/blog/2009/07/using-mysql-prepared-statements-in-php/

あなたは$ _GETや$ _POSTを変更することができます。

+1

"フィルタリング"キーの用途は何ですか?あなたは何のフィルタリングについて話していますか? –

1

この機能は意味を持ちません。
これは何もフィルタリングしません。
このように使用しないでください。

あなたのdbを注射攻撃から守るためには、この機能に存在するもののほとんどを実行すべきではないし、存在しないものがたくさんあるはずです。

文字列(データチャンクは引用符で囲まれています)を注射攻撃から保護するには、$ db-> real_escape_string以外のものを使用する必要があります。あなたは、この「など」最初のものであるかを定義しなければなりません「などの攻撃」からアプリケーションを保護するために彼らのために全く役に立たないreal_escape_stringとして、

を他の手順を使用する必要が他のクエリ部分を保護するために

関連する問題