我正在构建一个网络表单,我想用来自外部 oracle 数据库的数据预填充它。我们正在使用 rails OCI8 插件。
我想通过直接在查询中使用 URL 参数来确保我不会让自己被注入。
例如在控制器中:
def new
if params[:provider] && u = findByUserName(params[:provider])
monkey = {
:employeeEmail => u['EMAIL_ADDRESS'],
:employeeFirst => u['FIRST_NAME'],
:employeeLast => u['LAST_NAME'],
:userID => u['LOGIN_ID'],
:supervisorUserID => u['SUPERVISOR_ID'],
:supervisorName => u['SUPERVISOR_NAME'],
:supervisorEmail => u['SUPERVISOR_EMAIL']
}
@service = Service.new(monkey)
else
@service = Service.new
end
end
如您所见, params[:provider] 直接传递给 OCI8 查询:
def findByUserName(id)
if id
cursor = cursor_exec("SELECT DISTINCT
<QUERY INFO HERE>
AND external_user = :id
ORDER BY last_name, first_name", id)
collection = cursor.fetch_hash()
cursor.close
logoff
collection
end
end
Cursor_exec 函数
def cursor_exec(sql, *params)
@conn = OCI8.new('user','pass','server')
if params.length > 0
cursor = @conn.exec(sql, *params)
else
cursor = @conn.exec(sql)
end
end
OCI8 会通过绑定正确清理参数,还是有一种方法可以让我更安全?