9个版本 (5个重大更改)
0.7.0 | 2022年9月4日 |
---|---|
0.6.1 | 2022年5月25日 |
0.6.0 | 2022年4月10日 |
0.5.0 | 2022年2月27日 |
0.2.2 | 2021年8月19日 |
#838 在 HTTP服务器
每月11,007 次下载
45KB
770 行
actix-csrf
适用于Actix-web 4.0.0或更高版本的CSRF中间件,使用双提交令牌模式。
此crate尚未经过审计。请在生产中使用时自行承担风险。
使用方法
安装中间件是标准的:指定要使用的加密安全RNG,并声明哪些路径应设置CSRF cookie以及何时应验证CSRF cookie。
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| {
let csrf = Csrf::<StdRng>::new()
.set_cookie(Method::GET, "/login");
App::new().wrap(csrf).service(login_ui).service(login)
})
.bind(("127.0.0.1", 8080))?
.run()
.await
}
然后,使用CsrfCookie
提取器提取CSRF cookie,并用作为受保护请求一部分提供的CSRF令牌进行验证。
#[derive(Deserialize)]
struct LoginForm {
csrf_token: CsrfToken,
username: String,
password: String,
}
impl CsrfGuarded for LoginForm {
fn csrf_token(&self) -> &CsrfToken {
&self.csrf_token
}
}
/// Validates a login form that has a CSRF token.
#[post("/login")]
async fn login(form: Csrf<Form<LoginForm>>) -> impl Responder {
// At this point, we have a valid CSRF token, so we can treat the request
// as legitimate.
HttpResponse::Ok().finish()
}
这仅是使用双提交令牌模式的一种方式;有关更多信息,请参阅文档和示例。
安全考虑
使用双提交令牌模式有优点和局限性。强烈建议用户在开始使用此中间件之前阅读Owasp关于CSRF保护的文章。
此crate尝试设置安全的默认值,并且用户必须明确禁用深度防御功能。
许可协议
以下任一许可协议下授权:
- Apache License, Version 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
根据您的选择。
贡献
除非您明确声明,否则根据Apache-2.0许可协议定义,您有意提交给作品的所有贡献都应按上述方式双授权,无需任何额外条款或条件。
依赖关系
~15–28MB
~467K SLoC