小编sim*_*w16的帖子

内容安全策略 (CSP) URL 似乎没有任何效果。仍举报违规行为

我有一个 CSP,其中包含以下行:

script-src 'nonce-{random}' 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http: https://static.cloudflareinsights.com https://mydomain.app/cdn-cgi/scripts/6c4dd986/cloudflare-static/email-decode.min.js;
Run Code Online (Sandbox Code Playgroud)

我可以看到页面响应标头中的 CSP 是正确的。

我仍然收到[Report Only] Refused to load the script https://mydomain.app/cdn-cgi/scripts/6c4dd986/cloudflare-static/email-decode.min.js错误。

Cloudflare 会自动注入此脚本标记,因此我不能依赖该strict-dynamic属性来覆盖它,也不能添加随机数。

这是因为scrict-dynamic覆盖 CSP 中的固定 url 而失败吗?我们需要在应用程序内严格动态,但我们还需要在这些情况下允许自定义白名单 URL。

有任何想法吗?

编辑:具体来说,我认为问题出在 cloudflare 上。如何允许 cloudflare 注入脚本,同时具有严格的动态设置?你不能给 cloudflare 一个随机数,而且 strict-dynamic 也不会让你加入白名单,那么如何克服这个问题呢?

security nginx http-headers content-security-policy

6
推荐指数
1
解决办法
1309
查看次数

Puppeteer page.goTo() 永远不会完成

为什么 puppeteer page.goto() 挂起?

这是发生这种情况的另一个例子^

我一直不明白为什么,但即使是最简单的木偶脚本也无法通过 goTo()

我有以下代码:

    const browser = await puppeteer.launch({ executablePath: '/usr/bin/google-chrome-unstable', args: ["--proxy-server='direct://'", '--proxy-bypass-list=*', '--no-sandbox', '--disable-setuid-sandbox'] });
    const page = await browser.newPage();
    await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36');
    await page.setDefaultNavigationTimeout(0);

    log('before nav');
    await page.goto('http://www.google.com');

    log('waiting nav');
    await page.waitForNavigation({
        waitUntil: 'networkidle0'
    });

    log('complete');

    await browser.close();
Run Code Online (Sandbox Code Playgroud)

输出是:

$:# node lib/tests/nav.test.js
    before nav
    waiting nav

Run Code Online (Sandbox Code Playgroud)

它永远不会记录“完整”。我尝试过不使用代理旁路和代理服务器、打开和关闭无沙箱。我努力了networkidle2。它没有完成。我还尝试了各种不同的网站。我使用 Puppeteer 4.x 并使用节点 12.x 和 npm 6.x。

我研究了人们建议的 Promise 方法:

await Promise.All([ page.goto('http://www.google.com'), page.waitForNavigation() …
Run Code Online (Sandbox Code Playgroud)

javascript automation node.js e2e-testing puppeteer

6
推荐指数
1
解决办法
1万
查看次数

Google Gmail API - 如何以编程方式登录?

我正在寻找编写一个 PHP 脚本来扫描我的 gmail 收件箱,并阅读未读的电子邮件。不需要用户交互。这必须发生在执行 PHP 文件的 cronjob 上。

这甚至可以通过 API 实现吗?Google 的文档绝对糟糕透了,似乎没有任何示例可以让您以编程方式授权登录。他们总是要求用户在 oauth 请求上物理按下允许按钮。

有没有人尝试过简单地登录并列出您的消息而无需人工交互的经验?

php google-api google-oauth gmail-api

4
推荐指数
1
解决办法
4802
查看次数

数据量大。迭代而不耗尽内存的最佳方法?

使用 Laravel 6 等 Eloquent Collection 类。

所以我有“很多”数据需要处理。大约 5000 行,在获取它时,会生成一个包含 5000 个模型的集合。现在,每个模型可能都有 20 个属性需要读取。

有没有快速的方法来做到这一点?我目前有一个要读取的属性数组,然后像这样设置循环:

\fopen()...

foreach ($models as $model) {
            $row = [];
            foreach ($this->attributes as $attr) {
                $row[] = \data_get($model, $attr);
            }
        
        \fputcsv($fh, $row);
}

\fclose()...
Run Code Online (Sandbox Code Playgroud)

$models是一个 Laravel 集合,由其中创建,EloquentModel::find($ids);其中$ids是整数数组。(来自数据库的 5000 个 ID)

$this指的是包含 foreach 循环的类。attributes除了包含上面代码的函数和只是一个字符串数组的属性之外,这个类中没有其他任何东西。

对于 5000 行,每行循环 20 个属性,这可能需要很长时间来处理,并且在每种情况下,这实际上都会抛出FatalErrorException: Allowed memory size of 134217728 bytes exhausted

那么检索每行属性集的最快方法是什么?我个人想不出比这个嵌套循环更快的循环了。

此外,看到\fputcsv()将每一行写入文件,并且$row变量在每个循环中被覆盖,为什么我仍然得到Allowed memory size exhausted

LazyCollection …

php out-of-memory laravel

4
推荐指数
1
解决办法
4395
查看次数

dockerfile 不更新容器

我正在使用 docker 使用应用程序(我不是很熟悉),我需要添加 2 个新的 PHP 扩展。我Dockerfile对现有图像进行了如下更改:

FROM php:7.2-fpm

RUN apt-get update

RUN apt-get install -y git unzip

RUN php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer

RUN apt-get install -y git libpng-dev \
    && docker-php-ext-install gd

RUN apt-get install -y mysql-client \
    && docker-php-ext-configure pdo_mysql --with-pdo-mysql=mysqlnd \
    && docker-php-ext-install pdo_mysql

RUN apt-get install -y libgmp-dev bcmath \
    && docker-php-ext-configure gmp \
    && docker-php-ext-install gmp \
    && docker-php-ext-install bcmath

RUN pecl install xdebug \
    && docker-php-ext-enable xdebug

ADD …
Run Code Online (Sandbox Code Playgroud)

provisioning php-extension docker docker-compose

3
推荐指数
1
解决办法
755
查看次数