내 반응 웹 앱이 브라우저 콘솔 에서이 오류를 제공합니다.
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
태그를 유지 하는 것이 좋습니다.