file_field не является липким в моей форме Rails - PullRequest
3 голосов
/ 10 июня 2010

У меня есть довольно стандартная форма Rails:

<div>
    <h1>Create a New Listing</h1>
    <%- form_for @listing, :html => {:multipart => true} do |f| -%>
                    <div><%= f.label :title, "Title:"%> <%= f.text_field :title %></div>
            <div>
                <%= f.label :image, "Image:" %> <%= f.file_field :image 
            </div>
            <div>
                <%= f.label :sound, "Sound Clip:"%> <%= f.file_field :sound %><br />
            </div>
        <div class="submit"><%= f.submit 'Post Listing' %></div>
    <%- end -%>
</div>

Когда пользователь выбирает файл, но форма не проходит проверку, он всегда должен повторно выбрать файл.Это не липко.Любое предложение о том, как это исправить?

Спасибо!

1 Ответ

6 голосов
/ 10 июня 2010

Думаю, вы не можете сделать поле файла липким.Даже если Rails предоставляет начальное значение, большинство браузеров просто проигнорируют его (или иначе, некоторые умные люди могут установить для файла по умолчанию значение /etc/passwd, и если вы не обращаете внимания, в следующий раз вы узнаете, что ваш ящик укоренен.

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

ОБНОВЛЕНИЕ: Вы будете удивлены, как много людей вообще не имеют навыков безопасности. Я знаю людей, использующих браузер как root. Однако, «почему» не совсемпроблема - важный момент, который я пытался подчеркнуть, заключается просто в том, что это не вина Rails, скорее всего, проблема заключается в поведении браузера.

Вы можете прочитать статью , в которой говорится, что лучше, чемЯ могу ...

ОБНОВЛЕНИЕ 2:"Ваша коробка имеет права root" должна сказать "поле пользователя имеет права root". Я описываю следующий сценарий: пользователь отправляет файл innocent.txtи капчу. MaliciouСервер отвечает, что CAPTCHA неверно, введите его снова, и скрытно изменяет файл с innocent.txt на ~/.ssh/id_rsa.Пользователь не смотрит на поле файла (он уже указал правильное значение), поэтому просто повторяет CAPTCHA и нажимает submit.Теперь на сервере есть личный SSH-ключ пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...