You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby on Rails中使用"2.months"字符串进行日期计算的安全方案

Ruby on Rails安全处理字符串形式的时间周期计算

要安全处理形如"2.months"的字符串周期,不用eval的核心思路是解析字符串并做白名单校验,具体实现如下:

步骤与代码示例

# 待处理的周期字符串
period = "2.months"

# 拆分并清理输入内容
value_str, unit = period.split('.').map(&:strip)

# 定义允许的安全时间单位(可根据业务需求扩展)
allowed_units = %w[days weeks months years]

# 合法性校验+日期计算
if value_str.match?(/^\d+$/) && allowed_units.include?(unit)
  # 生成Rails内置的Duration对象,直接参与日期运算
  duration = value_str.to_i.send(unit)
  target_date = Date.current - duration
else
  # 非法输入处理,可根据需求调整(比如返回默认值或抛错)
  raise ArgumentError, "无效的时间周期格式,请传入类似'2.months'的合法字符串"
end

安全说明

  • 白名单allowed_units严格限制了可调用的方法,避免恶意输入触发危险操作
  • 正则/^\d+$/确保数值部分为正整数,排除非数值或恶意字符串
  • 最终调用的days/weeks/months/years都是Rails内置的安全方法,生成的Duration对象可直接参与日期运算

内容的提问来源于stack exchange,提问作者pinkfloyd90

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 08:25:02