Как устранить уязвимости в SPA, разработанные с помощью Firebase и vue. js, обнаруженные с помощью инструмента оценки уязвимостей - PullRequest
0 голосов
/ 13 июля 2020

Я разработал SPA с помощью Firebase и Vue. js, и я проверяю свой SPA на уязвимости с помощью OW ASP ZAP. Мне не удалось устранить три уязвимости, обнаруженные OW ASP ZAP. Я хотел бы знать, как можно устранить эти три уязвимости или нужно ли их устранять в первую очередь.

Предупреждения, выводимые OWAZAP, перечислены ниже.

  1. Идентификатор сеанса в URL Rewrite

Описание: Эта страница содержит сообщение об ошибке / предупреждении, которое может раскрыть конфиденциальную информацию, такую ​​как расположение файла, который вызвал необработанное исключение. Эта информация может быть использована для дальнейших атак на веб-приложение. Предупреждение может быть ложным срабатыванием, если сообщение об ошибке находится на странице документации.

Решение: Для безопасного содержания введите идентификатор сеанса в Cook ie. Для большей безопасности рассмотрите возможность использования комбинации cook ie и перезаписи URL.

URL① (метод GET) https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?database=projects%project name% 2Fdatabases% 2F (по умолчанию) & gsessionid = xxxxxxx = 8 & RID = xxx & SID = xxxxxxxx = 0 & AID = x & TYPE = xmlhttp & zx = xxxxxxx

URL② (Метод POST) https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?database=projects%2Fproject name3% 2Fdatabases% 2F (по умолчанию) & VER = 8 & gsessionid = xxxxxx = x xxxxxxxx & RID = xxxxx & TYPE = terminate & zx = xxxxxxx

Я подумал, что идентификатор сеанса не следует включать в URL-адрес. Это безопасно? Мне нужно что-то с этим делать?

Междоменная неверная конфигурация

Описание: загрузка данных веб-браузера возможна из-за неправильной конфигурации Cross Origin Resource Sharing (CORS) на веб-сервере

Решение: Убедитесь, что конфиденциальные данные недоступны без аутентификации (например, с помощью белого списка IP-адресов). Настройте HTTP-заголовок «Access-Control-Allow-Origin» для более ограниченного набора доменов или полностью удалите все заголовки CORS, чтобы разрешить веб-браузеру применять политику одного и того же происхождения (SOP) более ограничительным образом.

URL① https://cdn.jsdelivr.net/npm/@mdi / font@latest/css/materialdesignicons.min.css URL② https://cdn.jsdelivr.net/npm/@mdi / font@latest/fonts/materialdesignicons-webfont.woff2?v=5.3.45 URL③ https://fonts.googleapis.com/css?family=Roboto: 100,300,400,500,700,900

Доказательства: Access-Control-Allow-Origin: *

Сообщение об ошибке приложения

описание: Эта страница содержит сообщение об ошибке / предупреждении, которое может раскрывать конфиденциальную информацию, такую ​​как расположение файла, вызвавшего необработанное исключение. Эта информация может быть использована для дальнейших атак на веб-приложение. Предупреждение может быть ложным, если сообщение об ошибке находится на странице документации. \

Решение: Просмотрите исходный код этой страницы. Реализуйте настраиваемые страницы ошибок. Рассмотрите возможность реализации механизма для предоставления уникальной ссылки / идентификатора ошибки клиенту (браузеру) при регистрации данных на стороне сервера и не раскрытии их пользователю.

URL https://project-name.firebaseapp.com/js/chunk-vendors.70ef397d.js

firebase. json ниже.

{
  "hosting": {
    "public": "dist",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }
    ],
    "headers":[
      {
        "source": "**",
        "headers":[
          {
            "key": "X-Frame-Options",
            "value": "DENY"
          },
          {
            "key": "Cache-Control",
            "value": "private, no-store, no-cache, must-revalidate"
          },
          {
            "key": "X-Content-Type-Options",
            "value": "nosniff"
          },
          {
            "key": "X-XSS-Protection",
            "value": "1; mode=block"
          }
        ]
      }
    ]
  }
}

vue .config. js ниже.

module.exports = {
  transpileDependencies: [
    "vuetify"
  ],
  configureWebpack: {
    devtool: 'source-map'
  },
  pwa: {
    iconPaths: {
      favicon16: 'favicon.png',
      favicon32: 'favicon.png',
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...