[英]Rails ActiveRecord escape variable in join clause
此查詢有效,但對SQL注入完全開放:
products = Product.find(pids,
:select => 'products.*, P.code',
:joins => "left join product_dist_match P on
(P.pid = products.pid and P.cid = #{cid})",
)
我怎樣才能正確地逃避cid變量? conditions
參數允許格式['foo = ?', bar]
用於此目的,但joins
不允許。
我不想使用find_by_sql
因為那時我需要添加連接和條件,它們是模型默認范圍的一部分(不會是DRY)。
編輯:我的表結構基本上是這樣的:
products: pid (primary key)
product_dist_match: pid, cid, code
customers (not used in the query): cid (primary key)
請注意,這是一個只讀數據庫,Rails只有有限的參與。 我不打算為所有表格設置模型; 我只想進行如上所述的簡單查詢,而不會讓自己暴露於SQL注入攻擊。
我找到的答案是在模型上使用.sanitize
方法:
products = Product.find(pids,
:select => 'products.*, P.code',
:joins => 'left join product_dist_match P on
(P.pid = products.pid and P.cid = ' + Product.sanitize(cid) + ')',
)
如果您找到更好的解決方案,請發布!
這似乎是你想要做的更多。
products = Product.find(pids,
:select => 'products.*, P.code',
:joins => sanitize_sql_array [
'left join product_dist_match P on P.pid = products.pid and P.cid = ?',
cid
]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.