2014-11-03 2 views
0

Brakeman, отображающий следующую ошибку. Файлы управляются с помощью скрепки. в мой контроллеротчет brakeman - атрибут Direct Model, используемый в качестве имени файла

asset_file || = AssetFile.find (PARAMS [: идентификатор])

если asset_file
// загрузки файла
send_file asset_file.uploaded_file.path, Тип = > asset_file.uploaded_file_content_type
еще
вспышки [: ошибка] = т ('document.mind_your_asset_file')
redirect_to root_url
конец

enter image description here

ответ

5

Пожалуйста, имейте в виду, кондуктор не сообщать об ошибках [0], он сообщает предупреждения. Он генерирует предупреждения о потенциальных проблемах в приложении. Другими словами, он предупредит вас о вещах, которые вы, как человек, будете судить не о реальных проблемах. Практически невозможно, чтобы инструмент обеспечения чистого статического анализа никогда не сообщал ложные срабатывания.

Вы действительно не задавали вопрос, поэтому я предполагаю, что вы либо хотите знать, почему было предупреждено об этом предупреждении, и/или как его исправить. Если ни один из них не является вашим вопросом, пожалуйста, уточните.

Brakeman знает AssetFile является моделью (скорее всего, потому, что она определена в каталоге app/models). Он знает, что send_file разрешает доступ к файловой системе. Когда он видит send_file AssetFile.find(params[:id]).uploaded_file.path, он интерпретирует это как атрибут модели (вероятно, значение из базы данных), которое может быть под контролем пользователя. Поэтому он генерирует предупреждение File Access, позволяющее вам знать, что код может позволить злоумышленнику получить доступ к произвольным файлам на сервере.

Я полагаю, следующий вопрос: почему Brakeman сообщает об этом, когда вы используете paperclip, и поэтому это, вероятно, безопасно. Хорошо, потому что Brakeman ничего не знает о paperclip. Однако это вызвало много раз, поэтому я рассмотрю, безопасно ли это или нет, и посмотрите, как это использовать.

Для второго вопроса о том, что с этим делать - вам не нужно ничего делать. В то время как ноль предупреждений Бракемана является благородной целью, всегда будут ложные срабатывания. Для этого конкретного предупреждения вы ничего не можете сделать, чтобы этот код казался более безопасным для Brakeman без изменения самого Brakeman.

Если целью этого сообщения было на самом деле сообщить о ложном положительном результате, было бы лучше, чтобы open an issue for Brakeman.

[0] Я предполагаю, что технически он сообщает свои собственные ошибки в таблице исключений, которые можно увидеть на скриншоте. Вероятно, было бы полезно сообщить об этом проекту Brakeman, чтобы узнать, могут ли они быть исправлены.

1

Для ложноположительного кондуктора позволяет игнорировать эти предупреждения с помощью команды «кондуктор -I» за http://brakemanscanner.org/docs/ignoring_false_positives/

Перейти через инструмент и ответить на несколько вопросов для каждого из предупреждения. В конце сохраните файл как «config/brakeman.ignore». В следующий раз, когда вы запустите «brakeman», он запустит файл игнорирования.