Загрузка файла - хранимая XSS уязвимость в JavaScript - PullRequest
0 голосов
/ 02 сентября 2018

У меня есть 3 типа файлов (XML, PDF, zip), которые хранятся в файлах моего сервера и отправляются пользователю (на стороне клиента) в формате base64 по запросу (когда клиент нажимает кнопку).
Файлы загружаются на компьютер пользователя и не отображаются (на странице HTML).

Я провел тест безопасности с сервисом Checkmarx и получил проблему безопасности:
«Функция метода в строке 58 MyFile.js получает данные из базы данных для элемента readFileSync . Затем значение этого элемента проходит через код без надлежащей фильтрации или кодирования и в конечном итоге отображается для пользователя в методе function в строке 58 MyFile.js . Это может включить хранимую атаку между сайтами (XSS). ".

Код на моей стороне сервера:

var fs = require('fs');

downloadFile: function (req, res) {
  var params = req.allParams();
  var contents = fs.readFileSync(FilePathInTheProject).toString('base64');
  res.send(contents);
},

Я не понимаю, как хранимые на сервере файлы, которые недоступны со стороны клиента, могут включить хранимую атаку межсайтовых сценариев (XSS)?

Как я могу проверить наличие уязвимости?

И как правильно решить эту проблему безопасности?

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Вы должны проверить, кто имеет доступ к файлам, хранящимся в файловой системе. Достоверны ли файлы? Как вы запретили доступ к этим файлам? Могут ли они быть изменены (внедрение скрипта)? БД или файлы в файловой системе не должны рассматриваться как источник надежных данных по умолчанию. Все данные, возвращаемые пользователю, должны быть проверены.

0 голосов
/ 20 сентября 2018

Checkmarx считает, что вы берете любое содержимое из источника без какой-либо проверки. Таким образом, данные не испорчены, и если вы отправите их клиенту, они могут попасть в XSS.

Это правильно, если у нас есть представление без вашего объяснения.

@ Объяснение Килиана Коллинза верно. При этом вы можете просто пометить проблему как «Не эксплуатируемая», и при следующем сканировании вам это не покажут. Или, если у вас есть больше времени, вы можете расширить правило Cx, чтобы сделать это:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...