5 个版本
0.3.5 | 2024年1月23日 |
---|---|
0.3.4 | 2023年11月23日 |
0.3.3 | 2023年10月29日 |
0.3.2 | 2023年10月26日 |
0.3.1 | 2023年10月24日 |
#2162 in 网页编程
28KB
234 行
rocket_csrf_token
是 rocket_csrf 的一个稍加维护的版本。
用法
将 fairing 附加到 Rocket 实例
#![feature(decl_macro)]
#[macro_use]
extern crate rocket;
#[macro_use]
extern crate serde_derive;
use rocket_dyn_templates::Template;
#[launch]
fn rocket() -> _ {
rocket::build()
.attach(rocket_csrf_token::Fairing::default())
.attach(Template::fairing())
.mount("/", routes![new, create])
}
您还可以配置 fairing
#[launch]
fn rocket() -> _ {
rocket::build()
.attach(
rocket_csrf_token::Fairing::new(
rocket_csrf_token::CsrfConfig
::default()
.with_cookie_name("foobar")
.with_cookie_len(64)
.with_lifetime(Some(rocket::time::Duration::days(3)))
)
)
.attach(Template::fairing())
.mount("/", routes![new, create])
}
将 guard 添加到任何您想要访问会话 CSRF 令牌(例如,将其包含在表单中)或验证它(例如,验证表单)的请求中
use rocket::form::Form;
use rocket::response::Redirect;
use rocket_csrf_token::CsrfToken;
use rocket_dyn_templates::Template;
#[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
}
#[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
}
在 最小示例 中查看完整代码。
待办事项
- 添加将验证所有请求的 fairing 作为选项。
- 验证
X-CSRF-Token
标头。 - 设置 cookie 与会话一起过期。
- 添加 data guard 以使用 guard 验证表单。
- 添加用于渲染表单字段的助手。
- 添加用于为 Ajax 添加 HTML meta 标签的助手,并带有
X-CSRF-Token
标头(WIP)。 - 从 Ruby on Rails 中使用真实性令牌加密。
- 允许配置 CSRF 保护(CSRF 令牌字节长度、cookie 名称等)。
依赖关系
~17–51MB
~823K SLoC