1个不稳定版本

使用旧的Rust 2015

0.1.0 2018年1月18日

#11 in #csrf

MIT许可证

15KB
235 代码行

Iron双重提交Cookie跨站请求伪造

Build Status Documentation License

提供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攻击的更多信息,请参阅 OWASPWikipedia 的文章。

此中间件使用称为双重提交Cookie的方法,其中生成一个随机令牌并将其存储在客户端的cookie中。每次使用不安全的HTTP方法(例如 POSTPUT 等)时,提交必须还包括来自cookie的令牌。OWASP有一个更详细的 描述

依赖项

~5.5MB
~122K SLoC