防止SQL注入

时间:2013-06-06 22:02:27

标签: php sql codeigniter sql-injection pyrocms

我知道下面的代码是开放注射的,但我不确定解决它的最佳方法是什么。是否最好重复$new_id行,还是应该做更多的事情?

控制器:

public function ajax_update_product_youtube()
{
    if($_POST)
    {
        $id = $_POST['id'];
        $new_id = mysql_real_escape_string(trim($_POST['new_id']));
        $table = SITE_REF.'_ps_products';
        if($new_id != "")
        {
            $this->Ps_products_model->update_product_youtube($table, $id, $new_id);
        }                           
    }
}

型号:

public function update_product_youtube($table, $id, $new_id)
    {
        $table = $this->_table_products;
        $this->db->query("
            UPDATE $table SET $table.youtube='$new_id' WHERE $table.id='$id'
        ");
    }

1 个答案:

答案 0 :(得分:1)

使用CodeIgniter的Active Record(查询生成器3.0版),或使用查询绑定。

有效记录:

$this->db->where('id', $id)->update($table, array('youtube' => $new_id));

查询绑定:

$this->db->query("UPDATE {$table} SET youtube = ? WHERE id = ?", array($new_id, $id));

您还应该:

  • 永远不要相信用户输入。在到达数据库查询之前进行验证和清理。
  • 不要像这样动态表名。虽然在这方面没有任何技术上的“错误”,但它为自己提供了更多的工作。不要重复自己,保持简单。
相关问题