博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
跨站伪造请求CSRF(Cross-site request forgery)
阅读量:3756 次
发布时间:2019-05-22

本文共 739 字,大约阅读时间需要 2 分钟。

CSRF是说攻击者可以利用别人的权限去执行网站上的操作,例如删除资料。例如,攻击者张贴了以下脚本到网页上:

攻击者自己当然是没有权限可以执行”/posts/delete_all”这一页,但是网站管理员有。当网站管理员看到这一页时,浏览器就触发了这个不预期的动作而把资料删除。

要防范CSRF,首先可以从区别GET和POST的HTTP请求开始。我们在路由一章提过:所有读取、查询性质操作,都应该用GET,而会修改或删除到资料的,则要用POST、PATCH/PUT或DELETE。这样的设计,就可以防止上面的恶意程式码了,因为在浏览器中必须用表单form才能送出POST请求。
不过,这样还不够。因为即使是POST,浏览器还是可能不经过你同意而自动发送出去,例如:

To the harmless survey

所幸,Rails内建了CSRF防御功能,也就是所有的POST请求,都必须加上一个安全验证码。在app/controllers/application_controller.rb你会看到以下程式启用这个功能:

class ApplicationController < ActionController::Base  protect_from_forgery with: :exceptionend

这个功能会在所有的表单中自动插入安全验证码:

如果POST请求没有带正确的验证码,Rails就会丢出一个ActionController:InvalidAuthenticityToken的错误。

Layout中也有一段<%= csrf_meta_tags %>是给JavaScript读取验证码用的。

转载地址:http://srasn.baihongyu.com/

你可能感兴趣的文章
自定义Django模板过滤器和标签
查看>>
php中格式化时间和django中的时间格式
查看>>
python学习笔记+使用技巧
查看>>
django级联查询常用参考模式
查看>>
Django学习笔记+使用技巧
查看>>
python+ldap实例
查看>>
Django:model类的objects属性
查看>>
日志级别
查看>>
Django 结构及处理流程分析
查看>>
在django中使用logging模块
查看>>
python logging现学现用 – TimedRotatingFileHandler使用方法
查看>>
Django开发中整合新浪微博API
查看>>
python logging
查看>>
一个改进的logger类
查看>>
python 获取当前位置所在的函数名和行号
查看>>
python的logging库中TimedRotatingFileHandler类问题
查看>>
2012年7月编程语言排行榜:Objective-C超越C++
查看>>
J2EE快速开发框架Wabacus 3.4发布,开发效率提高5倍以上
查看>>
用Xmanager连接linux服务器
查看>>
集成问题
查看>>