2015-04-03 103 views
1

我正在file access预警下面的代码:路径遍历攻击4.1.0

FileUtils.rm(File.join(Project.with_deleted.find_by(
    :user_id => (User.find_by(:username => (params[:user_id])).id), 
    :name => (params[:id]) 
).satellitedir, params[:image_name])) 

警告:

当用户提供的输入可以包含“..”或类似的文字 传递给文件访问API,导致访问目标子目录之外的文件 。

我试图清理PARAMS有:

if !params[:image_name].gsub(/\\/, '').index('../') 
    #my code 
end 

,但这似乎对hakiri警告的警告没有效果。

回答

0

发生这种情况是因为使用了一种名为tainting的技术。

基本上,params对象被“污染”,因为它标记为来自用户输入。

相反,您需要验证该对象,然后自己对其进行修改。这里有一篇关于它的好文章:http://phrogz.net/programmingruby/taint.html

+0

对不起,ircmaxell!我使用了:'$ SAFE = 1 if params [:image_name] =〜“^ [\ w \ - 。] + $” params [:image_name] .untaint',但是对警告没有影响。 – sonalkr132 2015-04-04 07:10:01