1个不稳定版本
使用旧的Rust 2015
0.1.0 | 2018年1月18日 |
---|
#11 in #csrf
15KB
235 代码行
Iron双重提交Cookie跨站请求伪造
提供CSRF保护的Iron中间件。
使用示例
extern crate iron_dsc_csrf;
extern crate iron;
use iron_dsc_csrf::Csrf;
use iron::AroundMiddleware;
use iron::prelude::*;
use iron::status;
fn main() {
let csrf = Csrf::new(extract_token);
let handler = csrf.around(Box::new(index));
// Make and start the server
Iron::new(handler).http("localhost:8080").unwrap();
}
fn extract_token(request: &Request) -> Option<String> {
// Here you can extract the token from the form body, the query string,
// or anywhere else you like. In this simple example, we treat the entire
// query string as the CSRF token.
request.url.query().map(|x| x.to_owned())
}
fn index(request: &mut Request) -> IronResult<Response> {
let token = request.extensions.get::<Csrf>().unwrap();
let msg = format!("Hello, CSRF Token: {}", token);
Ok(Response::with((status::Ok, msg)))
}
概述
iron-dsc-csrf
是一个Iron中间件,提供对跨站请求伪造攻击的保护。有关CSRF攻击的更多信息,请参阅 OWASP 和 Wikipedia 的文章。
此中间件使用称为双重提交Cookie的方法,其中生成一个随机令牌并将其存储在客户端的cookie中。每次使用不安全的HTTP方法(例如 POST
、PUT
等)时,提交必须还包括来自cookie的令牌。OWASP有一个更详细的 描述。
依赖项
~5.5MB
~122K SLoC