ActionDispatch :: Http :: UploadedFile中的original_filename方法是否安全?

时间:2014-02-20 11:26:52

标签: ruby-on-rails

original_filename中的ActionDispatch::Http::UploadedFile方法是否可以安全地用作在主机系统中保存为文件,而无需进一步清理它?

1 个答案:

答案 0 :(得分:1)

查看源代码,它看起来不像是对文件名进行任何检查,所以除非他们在其他地方执行(这将是糟糕的设计,因此与Rails团队不同),真正的问题是:有什么危害文件名可以吗?我能想到的唯一可能恶意使用它的案例是:

  1. 如果文件名为“。”。如果您真的成功创建它们,那么很难删除。我怀疑Ruby会让你用这个名字保存一个文件,你可以试试看看。如果没有,这一点可以忽略不计。
  2. 或者可能是一个非常长的名称可能会导致操作系统的API代码中更深层的缓冲区溢出。
  3. 请注意,这些都不应该是的问题。操作系统试图让它无法创建。文件,但我已经看到它完成了。并且由于(大多数?)文件系统已经有最大文件名限制,它们应该只是为您错误或截断文件;截断自己是一种边缘偏执的措施,以防止将来可能在操作系统的API代码中发现的缓冲区溢出漏洞。这种利用很可能不存在。

    所以,如果你真的想,只要检查这两种情况,你应该没问题。您可能希望通过继承UploadedFile类并添加其名称为“。”的功能来实现此目的。或“..”,那么你只需给它一个随机的名字;如果它结束了,说100个字符,然后截断它。

    但我要说的是,这些都不足以保证在您的代码库中引入非标准类。我只是尝试按给定名称保存文件,并依赖于底层文件保存API来捕获错误,检查所述错误,并将它们报告给用户。