Ошибка при попытке вызвать API (Content Security Policy) - PullRequest
0 голосов
/ 23 марта 2020

Попытка запустить функцию get с развернутого веб-сайта и получить эту ошибку:

Refused to connect to 'https://www.themealdb.com/api/json/v2/xxx/search.php?s=apple' because it violates the following Content Security Policy directive: "default-src 'self' http://*.google-analytics.com http://www.googletagmanager.com https://*.google.com https://*.google-analytics.com https://*.googletagmanager.com https://*.gstatic.com https://*.googleapis.com https://authedmine.com https://az743702.vo.msecnd.net https://sentry.io ws://localhost:4200". Note that 'connect-src' was not explicitly set, so 'default-src' is used as a fallback.

Во время работы веб-сайта на локальном сервере все работало нормально.

Добавил meta tag к моему index.html и все еще получаю то же сообщение об ошибке.

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' http://* 'unsafe-inline'; script-src 'self' http://* 'unsafe-inline' 'unsafe-eval'">

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

Итак, сначала я добавил метатег для моей страницы index.html, и она не сработала. После этого я создал interceptor, чтобы добавить заголовки к моей get функции. Подробнее о перехватчиках вы можете прочитать на https://angular.io/api/common/http/HttpInterceptor

Все еще не работает. Затем я выяснил, что в моем файле server.ts есть следующие строки кода:

app.use(helmet());
app.use(helmet.contentSecurityPolicy({
  directives: AppConfig.cspDirectives
}));

. Подробнее о helmet: https://www.npmjs.com/package/helmet

Тогда в моем разделе провайдеров app.module назначена {provide: APP_CONFIG, useValue: AppConfig} конфигурация.

Вот как app.config Файл .ts теперь выглядит так:

import {InjectionToken} from '@angular/core';

export let APP_CONFIG = new InjectionToken('app.config');

export const AppConfig: any = {
  cspDirectives: {
    defaultSrc: [
      '\'self\'',
      'http://*.google-analytics.com',
      'http://www.googletagmanager.com',
      'https://*.google.com',
      'https://*.google-analytics.com',
      'https://*.googletagmanager.com',
      'https://*.gstatic.com',
      'https://*.googleapis.com',
      'https://authedmine.com',
      'https://az743702.vo.msecnd.net',
      'https://sentry.io',
      'https://www.themealdb.com/',
      'ws:<my-webpage-url>',
    ],
    styleSrc: [
      '\'self\'',
      '\'unsafe-inline\'',
      'https://*.googleapis.com'
    ],
    scriptSrc: [
      '\'self\'',
      '\'unsafe-inline\'',
      'http://*.googletagmanager.com',
      'https://*.google-analytics.com'
    ]
  }
};
0 голосов
/ 24 марта 2020

Вы должны проверить, какие заголовки ответов CSP отправляет ваш развернутый веб-сайт. Добавление метатега может ограничить только общий набор CSP.

Также вы пытаетесь подключиться к ''. Если ваш предполагаемый URL-адрес указан в белом списке в CSP, но по какой-то причине он пуст, это может быть причиной его сбоя.

...