【问题标题】:Is it dangerous to pass user input directly to strftime?将用户输入直接传递给 strftime 是否危险?
【发布时间】:2020-09-05 16:31:01
【问题描述】:

我有一个收集任意字符串的表单输入。我想将该输入直接传递给 strftime,以便用户可以指定自己的格式。例如:"mytext%Y" 可能是用户输入的,然后我会将其传递给 strftime。

# userinput = "mytext%Y"
mydate = DateTime.now.strftime(userinput)
# outputs "mytext2000"

这样做安全吗?如果没有,开发人员需要考虑或实施什么?

【问题讨论】:

    标签: ruby user-input strftime


    【解决方案1】:

    很安全。

    最坏的情况是当用户输入无效格式时,它会简单地将字符串打印出来。

    Date.today.strftime('%A')
    # => "Tuesday"
    
    Date.today.strftime('#{1 + 1}')
    # => "\#{1 + 1}"
    

    【讨论】:

    • 有没有这样不安全的时候,类似于 SQL 注入?
    • strftime 是“安全的”,因为它不会将任何用户提供的数据作为代码执行或导致任何副作用。但是,根据您对结果值的处理方式,您可能需要小心,因为结果字符串可以是没有任何限制的任何字符串值(它可以包含 Null 字节、空格、SQL、HTML、Javascript 或任何其他字符串值) .因此,您需要像对待其他用户提供的数据一样谨慎地考虑返回值。
    猜你喜欢
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 2014-12-13
    相关资源
    最近更新 更多