0

こんにちは、ZEND フレームワーク上に構築された Web アプリケーションからのこの小さなコード フラグメントがありますが、「name」はポスト リクエストから取得されるため、安全ではありません。$data の特殊なシンボルを防ぐための標準的な ZEND の方法はありますか? $where のように quoteInto があります。

$name = $this->_request->getParam('name');

// update query
$data = array(
    'name' => $name
);
$where = array(
    $users->getDbAdapter()->quoteInto('user_id = ?', $userId),
);
$users->update($data, $where);
4

2 に答える 2

1

これは、SQL インジェクションから安全です。Zend_Db渡す配列を名前付きパラメーターの配列として扱うupdate()ため、これらの値は自動的にエスケープされます。

于 2012-11-29T09:30:21.440 に答える
0

少し簡潔であれば、ティムは正しいです。:)

Zend_Db の update ステートメントの $data 配列は、バインドされたパラメーターに分割されます。正確なコードは にありZend_Db_Adapter_Abstractます。

関連する手順は多数ありますが、配列は最終的にこのステートメントになります。

$set[] = $this->quoteIdentifier($col, true) . ' = ' . $val;

元の配列の場所$col => $val

次に、SQL が作成されます。

    $sql = "UPDATE "
         . $this->quoteIdentifier($table, true)
         . ' SET ' . implode(', ', $set)
         . (($where) ? " WHERE $where" : '');

SQL インジェクションに対してかなり安全に見えます。

ただし、入力値を実際にサニタイズするためZend_Filter_Inputにいつでも使用できます。Zend_ValidateZend_Filter

于 2012-11-29T10:18:52.190 に答える