Ton*_*ony 3 forms ruby-on-rails
我有一个非常标准的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>
Run Code Online (Sandbox Code Playgroud)
当用户选择文件但表单因验证失败时,他必须始终重新选择该文件.它不粘.有关如何解决此问题的任何建议?
谢谢!
我认为你不能让文件字段变粘.即使Rails提供初始值,大多数浏览器也会忽略它(否则,某些smart-aleck可能会将默认文件设置为/etc/passwd
,如果你不注意,接下来就知道你的盒子是根的.
我能想到的最好的办法是设置一个标志,说明文件已经上传,所以如果用户没有选择另一个文件,请使用上次请求中已经发送的文件.
更新:你会惊讶于有多少人没有任何安全技能.我认识人们使用浏览器root
.然而,"为什么"并不是一个问题 - 我试图做的重点只是它不是Rails的错,问题很可能在于浏览器的行为.
你可以阅读一篇文章说它比我更好...
更新2: "您的盒子已植根"应该说"用户的盒子已植根".我描述的场景是这样的:用户提交文件innocent.txt
和CAPTCHA.恶意服务器响应CAPTCHA错误,再次输入,并隐蔽地将文件从更改innocent.txt
为~/.ssh/id_rsa
.用户不查看文件字段(他已经在那里输入了正确的值),所以只需重做CAPTCHA并推送提交.现在服务器具有用户的私有SSH密钥.
归档时间: |
|
查看次数: |
1335 次 |
最近记录: |