Skip to content

Latest commit

 

History

History
58 lines (40 loc) · 3.26 KB

saferedirects.russian.md

File metadata and controls

58 lines (40 loc) · 3.26 KB

Предотвращайте небезопасные перенаправления

Объяснение в один абзац

Когда перенаправления реализованы в Node.js и/или Express, важно выполнить проверку входных данных на стороне сервера. Если злоумышленник обнаружит, что вы не проверяете внешние вводимые пользователем данные, он может воспользоваться этой уязвимостью, разместив специально созданные ссылки на форумах, в социальных сетях и других общедоступных местах, чтобы пользователи могли щелкнуть по ним.

Пример: небезопасное экспресс-перенаправление с использованием пользовательского ввода

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

app.get('/login', (req, res, next) => {

  if (req.session.isAuthenticated()) {
    res.redirect(req.query.url);
  }

}); 

Предлагаемое исправление: чтобы избежать небезопасных перенаправлений, состоит в том, чтобы не полагаться на пользовательский ввод. Если необходимо использовать пользовательский ввод, можно использовать белые списки безопасного перенаправления, чтобы избежать уязвимости.

Пример: белый список безопасного перенаправления

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

function getValidRedirect(url) { 
    // check if the url starts with a single slash 
  if (url.match(/^\/(?!\/)/)) { 
    // Prepend our domain to make sure 
    return 'https://example.com' + url; 
  } 
    // Otherwise check against a whitelist
  return whitelist[url] ? url : '/'; 
}

app.get('/login', (req, res, next) => {

  if (req.session.isAuthenticated()) {
    res.redirect(getValidRedirect(req.query.url));
  }

}); 

Что говорят другие блогеры

Из блога NodeSwat:

К счастью, методы смягчения этой уязвимости довольно просты - не используйте неподтвержденный пользовательский ввод в качестве основы для перенаправления.

Из блога Hailstone

Однако, если логика перенаправления на стороне сервера не проверяет данные, введенные в параметре url, ваши пользователи могут оказаться на сайте, который выглядит точно так же, как ваш (examp1e.com), но в конечном итоге удовлетворяет потребности преступных хакеров!