forked from syntaxbullet/AuroraBot-discord
feat: Implement secure static file serving with path traversal protection and XSS prevention for template titles.
This commit is contained in:
@@ -19,6 +19,31 @@ describe("Web Router", () => {
|
||||
expect(data).toHaveProperty("status", "ok");
|
||||
});
|
||||
|
||||
it("should block path traversal", async () => {
|
||||
// Attempts to go up two directories to reach the project root or src
|
||||
const req = new Request("http://localhost/public/../../package.json");
|
||||
const res = await router(req);
|
||||
// Should be 403 Forbidden or 404 Not Found (our logical change makes it 403)
|
||||
expect([403, 404]).toContain(res.status);
|
||||
});
|
||||
|
||||
it("should serve existing static file", async () => {
|
||||
// We know style.css exists in src/web/public
|
||||
const req = new Request("http://localhost/public/style.css");
|
||||
const res = await router(req);
|
||||
expect(res.status).toBe(200);
|
||||
if (res.status === 200) {
|
||||
const text = await res.text();
|
||||
expect(text).toContain("body");
|
||||
}
|
||||
});
|
||||
|
||||
it("should not serve static files on non-GET methods", async () => {
|
||||
const req = new Request("http://localhost/public/style.css", { method: "POST" });
|
||||
const res = await router(req);
|
||||
expect(res.status).toBe(404);
|
||||
});
|
||||
|
||||
it("should return 404 for unknown routes", async () => {
|
||||
const req = new Request("http://localhost/unknown");
|
||||
const res = await router(req);
|
||||
|
||||
Reference in New Issue
Block a user