feat: add escapeHtml function
This can be used to escape any special characters in a string with HTML before sending from the server back to the client. This is important to prevent a cross-site scripting attack.
This commit is contained in:
@ -445,3 +445,11 @@ describe("onLine", () => {
|
||||
expect(await received).toEqual(expected)
|
||||
})
|
||||
})
|
||||
|
||||
describe("escapeHtml", () => {
|
||||
it("should escape HTML", () => {
|
||||
expect(util.escapeHtml(`<div class="error">"Hello & world"</div>`)).toBe(
|
||||
"<div class="error">"Hello & world"</div>",
|
||||
)
|
||||
})
|
||||
})
|
||||
|
@ -1,3 +1,6 @@
|
||||
import * as httpserver from "../../utils/httpserver"
|
||||
import * as integration from "../../utils/integration"
|
||||
|
||||
import { RateLimiter } from "../../../src/node/routes/login"
|
||||
|
||||
describe("login", () => {
|
||||
@ -34,4 +37,41 @@ describe("login", () => {
|
||||
expect(limiter.removeToken()).toBe(false)
|
||||
})
|
||||
})
|
||||
describe("/login", () => {
|
||||
let _codeServer: httpserver.HttpServer | undefined
|
||||
function codeServer(): httpserver.HttpServer {
|
||||
if (!_codeServer) {
|
||||
throw new Error("tried to use code-server before setting it up")
|
||||
}
|
||||
return _codeServer
|
||||
}
|
||||
|
||||
// Store whatever might be in here so we can restore it afterward.
|
||||
// TODO: We should probably pass this as an argument somehow instead of
|
||||
// manipulating the environment.
|
||||
const previousEnvPassword = process.env.PASSWORD
|
||||
|
||||
beforeEach(async () => {
|
||||
process.env.PASSWORD = "test"
|
||||
_codeServer = await integration.setup(["--auth=password"], "")
|
||||
})
|
||||
|
||||
afterEach(() => {
|
||||
process.env.PASSWORD = previousEnvPassword
|
||||
})
|
||||
|
||||
it("should return escaped HTML with 'Missing password' message", async () => {
|
||||
const resp = await codeServer().fetch("/login", { method: "POST" })
|
||||
|
||||
expect(resp.status).toBe(200)
|
||||
|
||||
const htmlContent = await resp.text()
|
||||
|
||||
expect(htmlContent).not.toContain(">")
|
||||
expect(htmlContent).not.toContain("<")
|
||||
expect(htmlContent).not.toContain('"')
|
||||
expect(htmlContent).not.toContain("'")
|
||||
expect(htmlContent).toContain("<div class="error">Missing password</div>")
|
||||
})
|
||||
})
|
||||
})
|
||||
|
Reference in New Issue
Block a user