外部の Oracle データベースからのデータを事前入力したい Web フォームを作成しています。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はバインドを介してパラメータを適切にサニタイズしますか、またはより安全にするために使用できる方法はありますか?