diff --git a/src/backend/fork_routes.js b/src/backend/fork_routes.js index c849cbe..b71aa18 100644 --- a/src/backend/fork_routes.js +++ b/src/backend/fork_routes.js @@ -230,9 +230,12 @@ async function karvanInviteAuthor(roomId) { // se responde primero: si se sale antes, el navegador se queda sin pagina setTimeout(() => process.exit(0), 500); }) - .get('/legacy/export', async (ctx) => { + // POST y no GET: en la direccion, la contraseƱa acaba en el historial del + // navegador, en el registro del servidor y en el Referer de lo siguiente que + // se cargue. En el cuerpo, no. + .post('/legacy/export', koaBody(), async (ctx) => { if (!isLoopbackRequest(ctx)) { ctx.status = 403; ctx.body = ''; return; } - const pw = ctx.query && ctx.query.password; + const pw = ctx.request.body && ctx.request.body.password; if (!pw || pw.length < 32) return ctx.redirect('/legacy'); try { const { filename, data } = await legacyModel.exportData({ password: pw }); diff --git a/src/views/legacy_view.js b/src/views/legacy_view.js index 3238e13..80f06f5 100644 --- a/src/views/legacy_view.js +++ b/src/views/legacy_view.js @@ -25,7 +25,7 @@ const legacyView = async () => { form( { action: "/legacy/export", - method: "GET", + method: "POST", id: "exportForm" }, label(i18n.exportPasswordLabel),