在Rails中将内联脚本与CSP结合使用

时间:2019-08-01 05:40:20

标签: ruby-on-rails ruby content-security-policy

我刚刚根据the docs

配置了导轨以使用CSP

我的确切配置如下

Rails.application.config.content_security_policy do |policy|
  policy.default_src :self, :https
  policy.font_src    :self, :https, :data
  policy.img_src     :self, :https, :data
  policy.object_src  :none
  policy.script_src  :self, :https
  policy.style_src   :self, :https
end

# TODO: Remove this when ready to use CSP
Rails.application.config.content_security_policy_report_only = true

然后我将csp_meta_tag添加到布局中的<head>

现在,当我启动应用程序时,我可以看到有很多关于CSP违规的报告。在我的苗条模板中,有一些javascript:标签,我希望CSP自动允许所有这些标签。这似乎是可行的,但我不太确定如何配置它以这种方式工作。

我想保持内联脚本保护处于启用状态,但是使用可用方法在我的应用程序中允许内联脚本,即使这意味着向内联脚本的每个实例添加标签或其他内容。

1 个答案:

答案 0 :(得分:0)

要允许内联脚本,您可以执行以下操作。

uint8_t* find_function_end(uint8_t* function)
{
    while (true)
    {
        auto opcode_size = x86disassembler::opcode_size(function);

        //  Failed to get opcode size
        if (!opcode_size)
            return nullptr;

        //  Search for the following opcodes:
        //  C3          - ret
        //  CB          - ret
        //  C2 iw       - ret imm16
        //  CA iw       - ret imm16
        if ((*function == 0xC3 || *function == 0xCB) && opcode_size == 1 ||
            (*function == 0xC2 || *function == 0xCA) && opcode_size == 3)
            return function;

        function += opcode_size;
    }
    return nullptr;
}

资料来源:
https://bauland42.com/ruby-on-rails-content-security-policy-csp/
https://rorsecurity.info/portfolio/content-security-policy-csp-strategy