2011-09-12 16 views
2

フレームワークが自動的に引用するときと、quoteという変数が混同されていると、混乱します。たとえば、私が知る限り、余分なパラメータを使用しない限り、where節では引用しません。Zend db - SQLインジェクションを避けるためにいつ引用する必要がありますか?

基本的なCRUD操作で手動でquoteを入力する必要がある場合に参照するガイド/チートシートはありますか?

ありがとうございます。

答えて

4

を、基本的な「親指のルールは、」あります次のようになります。

  • 値を文字列に挿入する必要がある場合は、"SELECT * from TABLE WHERE value=$value"を最初に引用する必要があります。
  • プレースホルダを使用している場合(例: $select->where('value = ?', $value');、またはarray('value' => $value)などの値の配列の場合、フレームワークは値を引用します。

はリトル単純化しすぎ、良い

+0

、それがお役に立てば幸いです。 1)任意のユーザ入力 2)SQLコードを含む可能性のあるもの –

+0

+1:私にとって、ワイルドカードは常に「order by」句です。これはユーザの入力からくることがあります。おそらく、あなたはこの側面に対処するための答えを増やすこともできます。 –

2

クエリ文字列を自分で作成することは絶対に避けてください。常にZend_Dbを使ってください。つまり、文字列を自分で構築することにより、あなたのwhere句(など)を指定しないでください:

$where = 'id = ' . $_REQUEST['id'] . ' and thing = ' . $_REQUEST['thing']; 
$select->where($where); 

代わりにこれを実行します。私にとって

$select 
    ->where('id = ?', $_REQUEST['id']) 
    ->where('thing = ?', $_REQUEST['thing']); 
関連する問題