2015-04-03 6 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, если params [: image_name] = ~"^[\ w \ -.] + $ " params [: image_name] .untaint', но не было никакого эффекта на предупреждение. – sonalkr132