引入外部CSS
无效
默认情况下,引入外部文件会返回“已屏蔽:csp”。经过查询得知,CSP
技术常被应用于防止运营商内容劫持(广告)以及XSS
攻击,其可通过以下两种方式使用:
使用方式一:Meta
标签
在 HTML
的 Head
中添加如下 Meta
标签,将在符合 CSP
标准的浏览器中使非同源的 script
不被加载执行。不支持 CSP
的浏览器将自动会忽略 CSP
的信息,不会有什么影响。具体兼容性如下,获取最新数据可点击这里。
<meta http-equiv="Content-Security-Policy" content="script-src 'self'">
使用方式二:Http
头部
Content-Security-Policy:
script-src 'unsafe-inline' 'unsafe-eval' 'self' *.vincentguo.cn *.yunetidc.com *.baidu.com *.cnzz.com *.c-cnzz.com *.duoshuo.com *.jiathis.com;report-uri /error/csp
高级知识:指令集合
指令 | 取值示例 | 说明 |
---|---|---|
default-src | 'self' cdn.example.com | 定义针对所有类型(js/image/css/web font/ajax/iframe/多媒体等)资源的默认加载策略,某类型资源如果没有单独定义策略,就使用默认。 |
script-src | 'self' js.example.com | 定义针对JavaScript的加载策略 |
object-src | 'self' | 针对,, 等标签的加载策略 |
style-src | 'self' css.example.com | 定义针对样式的加载策略 |
img-src | 'self' image.example.com | 定义针对图片的加载策略 |
media-src | 'media.example.com' | 针对或者引入的html多媒体等标签的加载策略 |
frame-src | 'self' | 针对iframe的加载策略 |
connect-src | 'self' | 针对Ajax、WebSocket等请求的加载策略。不允许的情况下,浏览器会模拟一个状态为400的响应 |
font-src | font.qq.com | 针对Web Font的加载策略 |
sandbox | allow-forms allow-scripts | 对请求的资源启用sandbox |
report-uri | /some-report-uri | 告诉浏览器如果请求的资源不被策略允许时,往哪个地址提交日志信息。不阻止任何内容,可以改用Content-Security-Policy-Report-Only头 |
base-uri | 'self' | 限制当前页面的url(CSP2) |
child-src | 'self' | 限制子窗口的源(iframe、弹窗等),取代frame-src(CSP2) |
form-action | 'self' | 限制表单能够提交到的源(CSP2) |
frame-ancestors | 'none' | 限制了当前页面可以被哪些页面以iframe,frame,object等方式加载(CSP2) |
plugin-types | application/pdf | 限制插件的类型(CSP2) |
回归主题,经过查阅官方手册得知:
修改/lib/public/AppFramework/Http/EmptyContentSecurityPolicy.php
中的参数即可放行指定域名下的跨站资源。
我的相关配置如下:
手册原文相关部分转载如下:
Modifying the content security policy
By default Nextcloud disables all resources which are not served on the same domain, forbids cross domain requests and disables inline CSS and JavaScript by setting a Content Security Policy. However if an app relies on third-party media or other features which are forbidden by the current policy the policy can be relaxed.
Note
Double check your content and edge cases before you relax the policy! Also read the documentation provided by MDN
To relax the policy pass an instance of the ContentSecurityPolicy class to your response. The methods on the class can be chained.
The following methods turn off security features by passing in true as the $isAllowed parameter
allowInlineScript (bool $isAllowed)
allowInlineStyle (bool $isAllowed)
allowEvalScript (bool $isAllowed)
The following methods whitelist domains by passing in a domain or * for any domain:
addAllowedScriptDomain (string $domain)
addAllowedStyleDomain (string $domain)
addAllowedFontDomain (string $domain)
addAllowedImageDomain (string $domain)
addAllowedConnectDomain (string $domain)
addAllowedMediaDomain (string $domain)
addAllowedObjectDomain (string $domain)
addAllowedFrameDomain (string $domain)
addAllowedChildSrcDomain (string $domain)
The following policy for instance allows images, audio and videos from other domains:
<?php
namespace OCA\MyApp\Controller;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\AppFramework\Http\ContentSecurityPolicy;
class PageController extends Controller {
public function index() {
$response = new TemplateResponse('myapp', 'main');
$csp = new ContentSecurityPolicy();
$csp->addAllowedImageDomain('*');
->addAllowedMediaDomain('*');
$response->setContentSecurityPolicy($csp);
}
}
经过本地搜索发现原始全局CSS
的位置如下:
/apps/theming/css/theming.scss
通过如下方式即可完成CSS
的引入:
/*引入soarliall.css*/
@import url("https://open.soarli.top/bysoarli/soarliall.css");
新建用户默认语言改为中文
网站根目录下的config/config.php
末尾追加:
// 默认用户为中文
'default_language' => 'zh_CN',
'default_locale' => 'zh',
如未生效,进入下面网址查看对应的缩写。
- 语言缩写查看网址:https://www.transifex.com/explore/languages/
- 地区缩写查看网址:https://github.com/moment/moment/tree/develop/locale
此外,用户也可以自行调整界面语言,点击右上角的用户头像进入“设置”,在“个人信息”页面修改“语言”和“本地”的语言为中文即可,如下图所示。
管理->概览中扫描到的问题
1.PHP configuration option output_buffering must be disabled
其实这个很好解决,PHP
默认是有4096字节缓冲的。但是Nextcloud
希望你关闭。如果你是自己安装的PHP
,在你安装PHP
的路径下,打开PHP
配置文件(php.ini
),将:
output_buffering = 4096
改为:
; output_buffering = 4096
;为PHP的注释符号
如果你是宝塔安装配置的php
,更简单了。在宝塔面板,依次打开:软件商店-已安装-PHPx.x设置-配置文件
查找文本output_buffering
,并在前面加上;
注释
随后重载配置或重启PHP
即可。
2.您的数据目录和文件可能可以从互联网访问。.htaccess 文件不工作。强烈建议您配置您的 web 服务器,使数据目录不再可访问,或将数据目录移到 web 服务器文档根目录之外。
这个其实是Nginx
的问题,为了进一步提升安全性,我们打开Nginx
网站设置:
在location内的禁止访问目录内,加入data目录以及cloud目录并重载Nginx配置。
3.PHP 的安装似乎不正确,无法访问系统环境变量。getenv(“PATH”) 函数测试返回了一个空值
这个处理方法很简单;如果你是自己安装配置的PHP
,一般不会出现这个问题,当时如果是使用宝塔安装,一般都会有这个问题,解决方法很简单:
在宝塔面板,依次打开:软件商店
-已安装
-PHPx.x设置
-FPM配置文件
在文末添加:
env[PATH] = /usr/local/bin:/usr/bin:/bin:/usr/local/php/bin
之后,可能需要重载PHP
配置或者重启PHP
服务才能生效。
4.您的网页服务器未正确设置以解析****。更多信息请参见文档
这个处理方法很简单,简单地说,设置Nginx
即可。如果你的Nginx
是宝塔安装的,那么打开网站的Nginx
:
之后追加以下内容:
rewrite /.well-known/carddav /remote.php/dav permanent;
rewrite /.well-known/caldav /remote.php/dav permanent;
保存、重载配置即可。
5.MySQL 被用作数据库,但不支持 4 字节字符。要能够在文件名或评论中正确处理 4 字节字符 (如 emoji),建议在 MySQL 中启用 4 字节支持。
1.在 [mysqld]
配置段里加入
innodb_large_prefix=true
innodb_file_format=barracuda
innodb_file_per_table=1
2.修改nextcloud
的数据库的字符集和排序规则
ALTER DATABASE nextcloud所在的数据库名称 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
使用phpmyadmin
:
执行成功:
3.重启MySQL
,修改nextcloud
配置文件/config/config.php
:
// 支持 4 字节字符(如 emoji)
'mysql.utf8mb4' => true,
4.修复数据库
occ
命令,需要在nextcloud
的安装根目录下执行:
sudo -u www php occ maintenance:repair
重启nginx
,php
6.未找到 PHP 的 "fileinfo" 模块。强烈推荐启用该模块,从而获得更好的 MIME 类型探测结果
安装如下插件:
删除“获取自己的免费账号”
使用 Nextcloud
分享文件时,页面底部默认会有一排“获取自己的免费账号”的文字链接,点击就会跳转到 Nextcloud
官网 Simple sign up 页面,如果不需要这个选项,可以在配置文件中添加相关参数去掉这一排文字链接。
在 /nextcloud/config/config.php
文件中添加以下代码后保存后即可
// 隐藏“获取自己的免费账号”
'simpleSignUpLink.shown' => false,
如果需要修改这一排文字链接,可以尝试先修改以下两个文件中对应的文字为需要的内容
文件一:/nextcloud/core/l10n/zh_CN.json
第 311 行,将这行中的“获取自己的免费账号”替换为自己的需要的文字
"Get your own free account" : "获取自己的免费账号",
文件二:/nextcloud/core/templates/layout.public.php
第 99 行,将这行中的 "https://nextcloud.com/signup/" 替换为自己需要的链接
<a href="https://nextcloud.com/signup/" target="_blank" rel="noreferrer noopener">
如果需要更换使用其他语言时显示的文字链接,方法也和上面一样。
参考资料:
https://caniuse.com/contentsecuritypolicy
https://blog.csdn.net/weixin_33883178/article/details/92269124
https://github.com/joeyguo/blog/issues/5
http://www.ruanyifeng.com/blog/2016/09/csp.html
https://github.com/nextcloud/server/issues/9297
https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP
https://segmentfault.com/a/1190000000369549
https://cloud.tencent.com/developer/article/1787467
http://amh.sh/bbs/post-10849-1-2.htm
https://www.cnswiz.com/3505.html
版权属于:soarli
本文链接:https://blog.soarli.top/archives/622.html
转载时须注明出处及本声明。