惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Forbes - Security
Forbes - Security
A
Arctic Wolf
M
MIT News - Artificial intelligence
T
Threat Research - Cisco Blogs
T
The Exploit Database - CXSecurity.com
C
CERT Recently Published Vulnerability Notes
NISL@THU
NISL@THU
L
Lohrmann on Cybersecurity
Martin Fowler
Martin Fowler
A
About on SuperTechFans
P
Palo Alto Networks Blog
Project Zero
Project Zero
The GitHub Blog
The GitHub Blog
WordPress大学
WordPress大学
Blog — PlanetScale
Blog — PlanetScale
博客园_首页
大猫的无限游戏
大猫的无限游戏
Cisco Talos Blog
Cisco Talos Blog
P
Proofpoint News Feed
D
DataBreaches.Net
Cyberwarzone
Cyberwarzone
T
Tor Project blog
IT之家
IT之家
P
Proofpoint News Feed
Help Net Security
Help Net Security
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
CXSECURITY Database RSS Feed - CXSecurity.com
Microsoft Azure Blog
Microsoft Azure Blog
V2EX - 技术
V2EX - 技术
K
Kaspersky official blog
Hugging Face - Blog
Hugging Face - Blog
MongoDB | Blog
MongoDB | Blog
B
Blog
N
News and Events Feed by Topic
The Cloudflare Blog
S
Schneier on Security
P
Privacy & Cybersecurity Law Blog
T
The Blog of Author Tim Ferriss
Recorded Future
Recorded Future
Last Week in AI
Last Week in AI
The Last Watchdog
The Last Watchdog
Hacker News - Newest:
Hacker News - Newest: "LLM"
L
LangChain Blog
I
InfoQ
F
Full Disclosure
The Register - Security
The Register - Security
阮一峰的网络日志
阮一峰的网络日志
H
Hacker News: Front Page
V
V2EX

博客园 - AllenDang

创业心得 - 从确定投资意向到开始发工资还有多远? 什么样的人适合创业公司? NoSql数据库使用半年后在设计上面的一些心得 Go语言实战 - 使用SendCloud群发邮件 用Go语言做产品半年的一些感觉 我是怎么拿到投资的 Go语言实战 - 我需要站内搜索 Go语言实战 - revel框架教程之缓存和Job Go语言实战 - 网站性能优化第一弹“七牛云存储” 坚持是什么? - 作为创业者在与投资人见面之后想到的 Go语言实战 - revel框架教程之MongDB的最佳搭档revmgo Go语言实战 - revel框架教程之权限控制 Go语言实战 - revel框架教程之用户注册 Go语言实战 - 创业进行时之创业伊始 我为什么喜欢Go语言 用Go写Windows桌面应用 - 使用窗体设计器 使用CGO封装Windows API 用Go写Windows桌面应用 - 使用资源文件 用Go写Windows桌面应用 - 使用Form
Go语言实战 - revel框架教程之CSRF(跨站请求伪造)保护
AllenDang · 2013-09-09 · via 博客园 - AllenDang

CSRF是什么?请看这篇博文“浅谈CSRF攻击方式”,说的非常清楚。

现在做网站敢不防CSRF的我猜只有两种情况,一是没什么人访问,二是局域网应用。山坡网之前属于第一种情况,哈哈,所以至今没什么问题。但昨天突然发现了有人开始扫url,估计用的是个工具,很整齐的扫了一大片知名框架和数据库管理工具的管理员登陆url。还好我们没有使用其中的任何一个,侥幸没事。但这也给我敲响了警钟,互联网上那是危机重重啊。

于是第一步就开始加上CSRF保护,搞起来还是花费了些时间,暗叹这种事情还是刚开始就做最容易。

好,动手。

获取revel-csrf包。

go get github.com/cbonello/revel-csrf

它是用revel的filter机制实现的,所以在controller包的init函数中给revel的默认filter链加上csrf处理。

revel.Filters = []revel.Filter{
  revel.PanicFilter,             
  revel.RouterFilter,            
  revel.FilterConfiguringFilter, 
  revel.ParamsFilter,            
  revel.SessionFilter,           
  revel.FlashFilter,             
  csrf.CSRFFilter,               // CSRF保护的filter
  revel.ValidationFilter,        
  revel.I18nFilter,             
  revel.InterceptorFilter,       
  revel.ActionInvoker,          
}

现在试试看除了GET之外的Request,应该会出现“403 Forbidden”错误,提示“CSRF token mismatch.”。起效了!

现在去修改view,在每一个POST的Form上添加一个csrf token。

<form class="form loginForm" action="/account/login" method="POST">
  <input type="hidden" name="csrf_token" value="{{ .csrf_token }}" />

</form>

再试试看,应该可已正常工作了。如果对应Ajax调用的话也是同理,在Request Data里面加上一个名叫“csrf_token”的字段,值是 {{.csrf_token}}。

改动不大,但涉及的地方很多,前前后后修改加测试还是花了一个小时。这事儿,一定要在刚开始的时候就考虑到,不然越到后期改起来越悲壮!