我对rails很新。我有一个模型'消息'使用:' belongs_to:sender'和' belongs_to:接收器'关系。 我正在尝试在两个用户之间创建一个消息线程:' current_user'和' params'。 在MessagesController的show controller操作中,我想使用这个sql查询的等价物:
Message.find_by_sql(
"SELECT *
FROM messages
WHERE
(sender_id = #{current_user.id} OR sender_id = #{params[:id]})
AND
(receiver_id = #{current_user.id} OR receiver_id = #{params[:id]});"
)
如果我在寻找一条消息,我会使用此Activerecord查询来阻止SQL注入:
Message.where('sender_id = ? OR receiver_id = ?', current_user.id, current_user.id).find(params[:id])
我目前的查询是:
Message.where(sender_id: [current_user.id, params[:id]], receiver_id: [current_user.id, params[:id]])
此查询目前是否防止SQL注入?
答案 0 :(得分:1)
sender_id IN (1, 2) AND receiver_id IN (3, 4)
,所有整数值都被清理。你可以简单地运行测试:
Message.where(sender_id: [current_user.id, "' is dangerous"], receiver_id: [current_user.id, params[:id]])
并在控制台中查看原始SQL输出。非法整数应转换为0。