#rocket-web #rocket #csrf #web-framework #web #security #http

rocket_csrf

为 Rocket 网页框架提供 CSRF (跨站请求伪造) 保护

7 个不稳定版本 (3 个破坏性更改)

0.3.0 2021 年 3 月 6 日
0.2.0 2020 年 10 月 18 日
0.1.1 2020 年 10 月 17 日
0.0.2 2020 年 10 月 16 日

#csrf 中排名 8

MIT 许可证

10KB
128 行代码(不包括注释)

rocket_csrf

Rocket 网页框架提供 CSRF (跨站请求伪造) 保护。

警告! 现在的实现非常简单,可能不适合生产环境。

关于 Rocket 中 CSRF 护理的讨论 在这里

目录

用法

公平 添加到 Rocket 实例

#![feature(decl_macro)]

#[macro_use] extern crate rocket;
#[macro_use] extern crate serde_derive;

use rocket_contrib::templates::Template;

fn main() {
    rocket::ignite()
        .attach(rocket_csrf::Fairing::default())
        .attach(Template::fairing())
        .mount("/", routes![new, create])
        .launch();
}

守卫 添加到任何您希望访问会话 CSRF 令牌的请求中(例如,将其包含在表单中)或验证它(例如,验证表单)

use rocket::response::Redirect;
use rocket::request::Form;
use rocket_contrib::templates::Template;
use rocket_csrf::CsrfToken;

#[get("/comments/new")]
fn new(csrf_token: CsrfToken) -> Template {
    // your code
}

#[post("/comments", data = "<form>")]
fn create(csrf_token: CsrfToken, form: Form<Comment>) -> Redirect {
    // your code
}

守卫 获取 CSRF 令牌以在 模板 中使用

#[get("/comments/new")]
fn new(csrf_token: CsrfToken) -> Template {
    let authenticity_token: &str = csrf_token.authenticity_token();

    // your code
}

将 CSRF 令牌添加到 模板 中的 HTML 表单

<form method="post" action="/comments">
    <input type="hidden" name="authenticity_token" value="{{ authenticity_token }}"/>
    <!-- your fields -->
</form>

将属性 authenticity_token 添加到您的 表单

#[derive(FromForm)]
struct Comment {
    authenticity_token: String,
    // your attributes
}

验证 表单 以具有有效的真实性令牌

#[post("/comments", data = "<form>")]
fn create(csrf_token: CsrfToken, form: Form<Comment>) -> Redirect {
    if let Err(_) = csrf_token.verify(&form.authenticity_token) {
        return Redirect::to(uri!(new));
    }

    // your code
}

最小示例 中查看完整代码。

待办事项

  • 作为选项添加验证所有请求的公平性。
  • 添加 数据守卫 以验证带有守卫的表单。
  • 添加用于渲染表单字段的助手。
  • 添加用于为 Ajax 添加 HTML meta 标签的助手 X-CSRF-Token 标题。
  • 验证 X-CSRF-Token 标题。
  • 使用来自 Ruby on Rails 的真实性令牌加密。
  • 允许配置 CSRF 保护(CSRF 令牌字节长度、cookie 名称等)。
  • 设置 cookie 以与会话一起过期。

依赖关系

~11MB
~225K SLoC