Skip to main content

Saihestu birbideratze ez seguruak

Azalpena

Node.js eta/edo Expressen birbideratzeak inplementatzen direnean, garrantzitsua da zerbitzariak sarrera balioztatzea. Erasotzailea konturatzen bada ez dela ari erabiltzaileak emandako kanpoko sarrera balioztatzen, ahultasun hori balia dezake foroetan, sare sozialetan eta beste toki publiko batzuetan berariaz horretarako sortutako estekak argitaratzeko, erabiltzaileek esteka horietan klik egin dezaten.

Adibidez: erabiltzaileen sarrera erabiliz egindako express birbideratzea ez da segurua

const express = require("express");
const app = express();

app.get("/login", (req, res, next) => {
if (req.session.isAuthenticated()) {
res.redirect(req.query.url);
}
});

Berbideratze ez seguruak ekiditeko proposatutako konponbideak erabiltzailearen sarreran oinarritzean datza. Erabiltzailaren sarrera erabili behar bada, berbideratze seguruen zerrena txuriak erabil daitezke ahuleziak azalean jartzeko.

Adibidea: Berbideratze seguruaren zerrenda txuria

const whitelist = {
"https://google.com": 1,
};

function getValidRedirect(url) {
// egiaztatu ia url-a '/' bakarrarekin hasten den
if (url.match(/^\/(?!\/)/)) {
// Atzean gehitu gure domeinua ziur egoteko
return "https://example.com" + url;
}
// Bestela, egiaztatu zerrenda txurian
return whitelist[url] ? url : "/";
}

app.get("/login", (req, res, next) => {
if (req.session.isAuthenticated()) {
res.redirect(getValidRedirect(req.query.url));
}
});

Beste blogari batzuek diotena

NodeSwat-en bloga:

Zorionez ahultasun hori arintzeko metodoak nahiko zuzenak dira; ez erabili erabiltzaileen sarrera balioztaturik birbideratzearen oinarri gisa.

Hailstone-ren bloga:

Hala ere, zerbitzariaren birbideratze logikak balioztatzen ez baditu URL parametroan sartzen diren datuak, baliteke erabiltzaileek zurea bezalako itxura duen gune batean amaitzea (examp1e.com), azkenean hacker kriminalei bere helburuak betetzeko aukera ematen diena!