mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-20 06:20:55 +00:00
feat(gateway): add Permissions-Policy header to default security headers
This commit is contained in:
49
src/gateway/http-common.test.ts
Normal file
49
src/gateway/http-common.test.ts
Normal file
@@ -0,0 +1,49 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { setDefaultSecurityHeaders } from "./http-common.js";
|
||||
import { makeMockHttpResponse } from "./test-http-response.js";
|
||||
|
||||
describe("setDefaultSecurityHeaders", () => {
|
||||
it("sets X-Content-Type-Options", () => {
|
||||
const { res, setHeader } = makeMockHttpResponse();
|
||||
setDefaultSecurityHeaders(res);
|
||||
expect(setHeader).toHaveBeenCalledWith("X-Content-Type-Options", "nosniff");
|
||||
});
|
||||
|
||||
it("sets Referrer-Policy", () => {
|
||||
const { res, setHeader } = makeMockHttpResponse();
|
||||
setDefaultSecurityHeaders(res);
|
||||
expect(setHeader).toHaveBeenCalledWith("Referrer-Policy", "no-referrer");
|
||||
});
|
||||
|
||||
it("sets Permissions-Policy", () => {
|
||||
const { res, setHeader } = makeMockHttpResponse();
|
||||
setDefaultSecurityHeaders(res);
|
||||
expect(setHeader).toHaveBeenCalledWith(
|
||||
"Permissions-Policy",
|
||||
"camera=(), microphone=(), geolocation=()",
|
||||
);
|
||||
});
|
||||
|
||||
it("sets Strict-Transport-Security when provided", () => {
|
||||
const { res, setHeader } = makeMockHttpResponse();
|
||||
setDefaultSecurityHeaders(res, {
|
||||
strictTransportSecurity: "max-age=63072000; includeSubDomains; preload",
|
||||
});
|
||||
expect(setHeader).toHaveBeenCalledWith(
|
||||
"Strict-Transport-Security",
|
||||
"max-age=63072000; includeSubDomains; preload",
|
||||
);
|
||||
});
|
||||
|
||||
it("does not set Strict-Transport-Security when not provided", () => {
|
||||
const { res, setHeader } = makeMockHttpResponse();
|
||||
setDefaultSecurityHeaders(res);
|
||||
expect(setHeader).not.toHaveBeenCalledWith("Strict-Transport-Security", expect.anything());
|
||||
});
|
||||
|
||||
it("does not set Strict-Transport-Security for empty string", () => {
|
||||
const { res, setHeader } = makeMockHttpResponse();
|
||||
setDefaultSecurityHeaders(res, { strictTransportSecurity: "" });
|
||||
expect(setHeader).not.toHaveBeenCalledWith("Strict-Transport-Security", expect.anything());
|
||||
});
|
||||
});
|
||||
@@ -14,6 +14,7 @@ export function setDefaultSecurityHeaders(
|
||||
) {
|
||||
res.setHeader("X-Content-Type-Options", "nosniff");
|
||||
res.setHeader("Referrer-Policy", "no-referrer");
|
||||
res.setHeader("Permissions-Policy", "camera=(), microphone=(), geolocation=()");
|
||||
const strictTransportSecurity = opts?.strictTransportSecurity;
|
||||
if (typeof strictTransportSecurity === "string" && strictTransportSecurity.length > 0) {
|
||||
res.setHeader("Strict-Transport-Security", strictTransportSecurity);
|
||||
|
||||
Reference in New Issue
Block a user