add native csrf helpers

This commit is contained in:
udo
2026-07-06 09:58:25 +00:00
parent 125a24e2f9
commit b8c2efe976
7 changed files with 129 additions and 1 deletions
+33
View File
@@ -877,6 +877,39 @@ void session_destroy(String session_name)
}
}
String csrf_session_key(String token_name)
{
token_name = first(trim(token_name), "csrf_token");
return("_csrf_" + token_name);
}
String csrf_token(String session_name, String token_name)
{
session_start(session_name);
String key = csrf_session_key(token_name);
if(context->session[key] == "")
{
String random = random_bytes(32);
if(random.size() != 32)
random = session_id_create();
context->session[key] = sha256_hex(random);
}
return(context->session[key]);
}
bool csrf_valid(String submitted_token, String session_name, String token_name)
{
session_start(session_name);
String expected = context->session[csrf_session_key(token_name)];
return(expected != "" && submitted_token != "" && crypto_equal(submitted_token, expected));
}
void csrf_rotate(String session_name, String token_name)
{
session_start(session_name);
context->session.erase(csrf_session_key(token_name));
}
String ws_make_accept_key(String client_key)
{
return(base64_encode(gen_sha1(
+3
View File
@@ -33,6 +33,9 @@ StringMap load_session_data(String session_id);
void save_session_data(String session_id, StringMap data);
String session_start(String session_name = "uce-session");
void session_destroy(String session_name = "uce-session");
String csrf_token(String session_name = "uce-session", String token_name = "csrf_token");
bool csrf_valid(String submitted_token, String session_name = "uce-session", String token_name = "csrf_token");
void csrf_rotate(String session_name = "uce-session", String token_name = "csrf_token");
String ws_make_accept_key(String client_key);
bool ws_is_valid_client_key(String client_key);
String ws_encode_frame(String payload, u8 opcode = 0x1, bool is_final_fragment = true);