类似struts的token,使用session保存token,调用check_token后就把session里的token清掉,所以不能重复调用。
因为有些界面可能会有多个表单,这些表单最好共用同一个token,不然提交过来的token很难验证,所以这里做了处理,不会多次生成。
module ApplicationHelper
def token_field
hidden_field_tag(:__token__, (@__token__ ||= (session[:__token__] =
Digest::SHA1.hexdigest((Time.now.to_i + rand(0xffffff)).to_s)[0..39])))
end
end
class ApplicationController < ActionController::Base
def check_token
if session[:__token__] == params[:__token__]
session[:__token__] = nil
session.update
return true
end
false
end
end
<%= form_tag(:controller => "test", :action => "test") %>
<%= token_field %>
<%= submit_tag "提交" %>
</form>
检查token:
#方法1:
class TestController < ApplicationController
def test
unless check_token
return redirect_to("/")
end
#...
end
end
#方法2:
class TestController < ApplicationController
before_filter :check_token, : only => ["test"], : redirect_to => "/"
def test
#...
end
end
分享到:
- 2006-12-07 16:35
- 浏览 4630
- 评论(0)
- 论坛回复 / 浏览 (0 / 5929)
- 查看更多
相关推荐
4. JavaScript接收到服务器响应后,可以在前端显示错误提示,阻止表单提交,直到用户输入了唯一的值。 在实际应用中,你需要将"simple_form_unique"集成到你的Rails项目中。这通常包括以下步骤: 1. 添加gem到...
7. 安全实践:理解CSRF(跨站请求伪造)和XSS(跨站脚本攻击)等安全问题,并采取相应措施,如使用POST而非GET提交数据,防止密码明文传输,以及对用户输入进行过滤和转义。 8. 无障碍性:遵循Web Content ...
- 使用React、Vue、Angular等前端框架可以简化表单构建,例如使用Formik、Vuelidate等库进行表单验证。 - Material-UI、Bootstrap等组件库可以快速美化界面。 7. **后端处理**: - 使用Node.js、Django、Ruby on...
- **输入验证**:前端需要对用户输入进行实时验证,例如检查邮箱格式是否正确,密码强度是否达标,防止无效数据提交。 - **反馈提示**:当用户输入错误时,需要即时显示错误信息,以便用户能够及时更正。 - **...
4. 表单处理:包括验证、提交和回显等,简化客户端和服务器之间的交互。 5. 安全性:内置的安全机制,如防止XSS(跨站脚本攻击)和CSRF(跨站请求伪造)。 五、HTML后台框架的实际应用 HTML后台框架广泛应用于各种...
7. **.gitignore** - 定义了在版本控制中应忽略的文件或目录,防止不必要的文件被提交到仓库。 8. **Gemfile** 或 **package.json** - 如果项目使用了Ruby on Rails或Node.js,这些文件会列出项目的依赖库。 9. **...
- 自动表单处理:能够自动处理表单提交,简化了前端和后端的数据交互过程。 - ORM 支持:提供了对象关系映射(Object Relational Mapping)功能,使得数据库操作更加便捷。 - 内置安全性功能:具有内置的安全性...
Laravel的安全机制也非常完善,包括了对提交表单的数据验证,它提供了大约80种不同的验证规则,几乎覆盖了所有的常见需求。Laravel还采用了CSRF令牌来防止跨站请求伪造,增加了系统的安全性。 中间件和路由机制是...
1.1.2.2 防止对数据库的攻击:对表单输入的数据进行校验和处理 数据输入可能引发许多问题。因为 HTML 和数据库的限制,数据中总包含特定的符号—举例来说,省略符号和引号—可能导致你的数据库遭到攻击,最终得到你...