提问人:richard_ba 提问时间:5/27/2021 更新时间:5/28/2021 访问量:131
控制器中可能的 SQL 注入
Possible SQL injection in a controller
问:
我在 Ruby 中有这段代码,我相信它可能是 SQL 注入点
@remaining_mdls = @remaining_mdls&.where("\"#{paginated_params_name}\" > ?", paginated_params_val) if paginated_params_val.present?
此方法检查某些对象的可用性,但我认为它可以用于恶意目的。
这安全吗?
答:
0赞
alf
5/28/2021
#1
是的。您正在插值 .
最简单的解决方法是验证是否包含在已知列列表中:paginated_params_name
paginated_params_name
ALLOWED_PAGINATED_PARAMS = %w(created_at updated_at ...)
if paginated_params_val.present?
unless ALLOWED_PAGINATED_PARAMS.include?(paginated_params_name)
fail "Unknown pagination param '#{paginated_params_name}'"
end
@remaining_mdls = @remaining_mdls&.where("\"#{paginated_params_name}\" > ?", paginated_params_val)
end
评论
0赞
richard_ba
5/28/2021
paginated_params_name 是一种方法,它返回如下内容 这是实现这一目标的最简单方法吗?@paginated_params_name ||= request.headers['X-Pagination-Param'] || params[:paginated_param]
0赞
alf
5/28/2021
是的。否则,黑客可以使用自定义的“X-Pagination-Param”构建请求并运行 SQL 注入攻击。您描述的方法具有记忆功能:它将标头值缓存在变量中,以便在多次调用该方法时可以快速访问该值,因此此代码应该不会对性能产生任何影响。
评论
paginated_params_name