首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Ruby on Rails 開發實戰(四十六):ActiveRecord 基礎 - SQL 與 ActiveRecord

     編輯:Java 相關知識

find 的 :conditions 參數對應 SQL WHERE 子句,ActiveRecord 提供安全的參數化機制防止 SQL Injection。

字串條件(僅限固定值)

pos = Order.find(:all, :conditions => "name = 'dave' and pay_type = 'po'")

危險的字串插值

# 不要這樣做!
name = params[:name]
pos = Order.find(:all, :conditions => "name = '#{name}' and pay_type = 'po'")

安全參數化:位置參數

name = params[:name]
pos = Order.find(:all, :conditions => ["name = ? and pay_type = 'po'", name])

問號依序對應陣列後續元素,ActiveRecord 自動處理引號跳脫與型別轉換。

安全參數化:具名參數

name = params[:name]
pay_type = params[:pay_type]
pos = Order.find(:all, 
  :conditions => ["name = :name and pay_type = :pay_type", 
    {:name => name, :pay_type => pay_type}])

直接傳入 params Hash

pos = Order.find(:all, 
  :conditions => ["name = :name and pay_type = :pay_type", params])

所有參數化方式皆會妥善處理 SQL 跳脫,有效防禦注入攻擊。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved