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!