我有一个Rails应用(v4.2)。我有两个动作允许使用回形针上传图像。我对mime类型进行回形针验证。
服务器上的反恶意软件在/ tmp中发现了一堆这样的PHP文件:
/tmp/RackMultipart20190610-9668-u9nebk.php
我认为它们是在文件上传过程中创建的。
两个问题:
如何跟踪它们的来源?在我的production.log中,我看到了一大堆404帖子,这些帖子伪造了joomla和wordpress .php路径,但对这些上传没有任何影响。
将来如何预防?
我正在使用机架攻击,可以阻止.php文件扩展名,但是如何阻止表单中的文件上传?
我们在两个地方都有登录成员可以上传图像或PDF的地方。如何阻止所有其他尝试上传文件?
答案 0 :(得分:2)
绕过文件上传是上传webshell和其他内容的常用技术。
有2种基本方法可以帮助您减少上传到服务器的文件量:
MIME内容类型验证:如果您验证了上传文件的内容类型(由于只需要图像),则可以确保仅上传图像类型文件:
:content_type => ["image/gif", "image/jpg", "image/jpeg", "image/png", "image/bmp", "image/x-bmp"]
但这仍然可以绕开,因此您需要添加另一个验证:
文件扩展名验证:您还应该添加文件扩展名验证,以确保仅允许图像类型的扩展名上载。
我找到了一个很不错的文章,其中显示了文件扩展名验证的良好实现:https://stevenyue.com/blogs/validate-attachment-file-size-and-type-in-rails/
确保同时实现这两种技术,并且应该没事。