[javascript] 글꼴 ‘data : font / woff…’로드 거부는 다음 콘텐츠 보안 정책 지침을 위반합니다 :“default-src ‘self’”. ‘font-src’에 유의하십시오.

내 반응 웹 앱이 브라우저 콘솔 에서이 오류를 제공합니다.

Refused to load the font 'data:font/woff;base64,d09........' because it` 
`violates the following Content Security Policy directive: "default-src` `'self'". Note that 'font-src' was not explicitly set, so 'default-src' is used as a fallback.

또한:

Refused to connect to 'ws://localhost:3000/sockjs-node/782/oawzy1fx/websocket' because it violates the following Content Security Policy directive: "default-src 'self'". Note that 'connect-src' was not explicitly set, so 'default-src' is used as a fallback.

브라우저 콘솔의 스크린 샷
여기에 이미지 설명 입력

index.html을 이 가지고 메타 :

<meta http-equiv="Content-Security-Policy" content="img-src 'self' data:; default-src 'self' http://121.0.0:3000/">

WebPack.cofig.js

var debug = process.env.NODE_ENV !== "production";
var webpack = require('webpack');
var path = require('path');

module.exports = {
    context: path.join(__dirname, "./src"),
    devtool: debug ? "inline-sourcemap" : true,
    entry: "../src/index.js",

    module: {
        rules: [
            {
                test: /\.(jpe?g|png|gif|svg|woff|woff2|eot|ttf)$/i,  // a regular expression that catches .js files
                exclude: /node_modules/,
                loader: 'url-loader',
            },
            {
                test: /\.(js|.jsx)$/,
                exclude: /(node_modules|bower_components)/,
                loader: 'babel-loader',
                query: {
                    presets: ['react','es2016', 'stage-0',],
                    plugins: ['react-html-attrs', 'transform-decorators-legacy', 'transform-class-properties'],
                }
            },
            {
                test: /\.css$/,
                use: [
                    "style-loader",
                    {
                        loader: "css-loader",
                    }
                ]
            }
        ]
    },
    resolve: {
        modules: [
            path.join(__dirname, "src"),
            "node_modules",
        ]
    },
    output: {
        path: __dirname + "/public/",
        // publicPath: "/public/",
        filename: "build.js"
    },
    plugins: debug ? [] : [
        new webpack.optimize.DedupePlugin(),
        new webpack.optimize.OccurrenceOrderPlugin(),
        new webpack.optimize.UglifyJsPlugin({ mangle: false, sourcemap: false }),
    ],
    devServer: {
        port: 3000, // most common port
        contentBase: './public',
        inline: true,
        historyApiFallback: true,
    }
};



답변

저에게는 Chrome 확장 프로그램 ‘Grammarly’때문이었습니다. 이를 비활성화 한 후 오류가 발생하지 않았습니다.


답변

이 특정 오류를 수정하려면 CSP에 다음이 포함되어야합니다.

font-src 'self' data:;

따라서 index.html 메타는 다음과 같아야합니다.

<meta http-equiv="Content-Security-Policy" content="font-src 'self' data:; img-src 'self' data:; default-src 'self' http://121.0.0:3000/">


답변

가치있는 일-Chrome 업데이트와 관련이 있다고 가정하면 비슷한 문제가 발생했습니다.

font-src를 추가 한 다음 CDN을 사용하고 있었기 때문에 URL을 지정해야했습니다.

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; font-src 'self' data: fonts.gstatic.com;">


답변

개인적인 경험에서 사이트를 시크릿 (Chrome), Private Browsing (Firefox) 및 InPrivate (IE11 && Edge)에서 실행하여 애드온 / 확장 프로그램의 간섭을 제거하는 것이 항상 가장 좋은 첫 번째 단계입니다. 설정에서 명시 적으로 활성화 된 경우이 모드에서 테스트를 방해 할 수 있습니다. 그러나 문제 해결을위한 쉬운 첫 번째 단계입니다.

내가 여기에 온 이유는 Web of Trust (WoT)가 내 페이지에 콘텐츠를 추가하고 내 페이지가 매우 엄격한 콘텐츠 보안 정책을 가졌기 때문입니다.

Header set Content-Security-Policy "default-src 'none'; font-src 'self' data:; style-src 'self' 'unsafe-inline' data:; img-src 'self' data:; script-src 'self' 'unsafe-inline'; connect-src 'self';"

이로 인해 많은 오류가 발생했습니다. 나는 확장 프로그램 에이 사이트에서 프로그래밍 방식으로 실행하지 않도록 지시하는 방법에 대한 답변을 더 찾고있었습니다. 이렇게하면 사람들이 확장 프로그램을 사용하면 내 사이트에서 실행되지 않습니다. 이것이 가능하다면 광고 차단기는 오래 전에 사이트에서 금지되었을 것입니다. 그래서 내 연구는 약간 순진합니다. 이것이 다른 답변에서 언급 된 소수의 확장과 특별히 관련되지 않은 문제를 진단하려는 다른 사람에게 도움이되기를 바랍니다.


답변

이것을 다음에 추가해야 할 수도 있습니다 webpack.config.js.

devServer: {

        historyApiFallback: true
    }
};


답변

나는 또한 오늘 내 노드 응용 프로그램에서 동일한 오류에 직면했습니다.

여기에 이미지 설명 입력

아래는 내 노드 API입니다.

app.get('azureTable', (req, res) => {
  const tableSvc = azure.createTableService(config.azureTableAccountName, config.azureTableAccountKey);
  const query = new azure.TableQuery().top(1).where('PartitionKey eq ?', config.azureTablePartitionKey);
  tableSvc.queryEntities(config.azureTableName, query, null, (error, result, response) => {
    if (error) { return; }
    res.send(result);
    console.log(result)
  });
});

수정은 매우 간단했으며 API 앞에 슬래시 “/”가 누락되었습니다. 따라서 경로를 ‘azureTable’에서 ‘/ azureTable’로 변경 한 후 문제가 해결되었습니다.


답변

CSP는 신뢰할 수있는 소스를 허용 목록에 추가하는 데 도움이됩니다. 다른 모든 소스는 액세스가 허용되지 않습니다. 이 Q & A를 주의 깊게 읽고 신뢰할 수있는 경우 글꼴, 소켓 연결 및 기타 소스를 허용 목록에 포함 해야합니다 .

수행중인 작업을 알고 있다면 meta테스트 할 태그를 주석 처리 할 수 ​​있습니다 . 아마도 모든 것이 작동 할 것입니다. 하지만 여기에서 귀하 / 귀하의 사용자가 보호되고 있으므로 meta태그를 유지 하는 것이 좋습니다.