内容安全策略对象不能在Firefox中列入白名单

时间:2017-12-18 09:35:30

标签: html firefox svg content-security-policy

目前,我正致力于将内容安全策略(CSP)标头添加到现有应用程序中。如果默认情况下所有内容都被列入黑名单(default-src: 'none'),然后将所有必需资源列入白名单(f.e。:img-src: 'self'),那将是首选。

现在,当一张SVG图标中包含图标时,没有标签允许在Firefox(57& 58)中列入白名单,而img-src指令适用于Chrome(63)和Opera(49) 。因此,这会迫使我削弱默认标签,我不愿意这样做。这是Firefox特有的错误,还是我们的代码违反了导致这种未定义行为的某些标准?

以下是重现行为的代码。

HTML,只导致Firefox阻止图像:

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta http-equiv="Content-Security-Policy" content="
            default-src 'none';
            child-src 'self';
            connect-src 'self';
            font-src 'self';
            frame-src 'self';
            img-src 'self';
            manifest-src 'self'; 
            media-src 'self'; 
            object-src 'self'; 
            script-src 'self'; 
            style-src 'self'; 
            worker-src 'self';
        ">
    </head> 
    <body>
        <svg>
            <use xlink:href="img.svg#circle"></use>
        </svg>
    </body>
</html>

虽然这在Firefox中有效,但CSP策略明显减弱:

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta http-equiv="Content-Security-Policy" content="
            default-src 'self';
        ">
    </head>
    <body>
        <svg>
            <use xlink:href="img.svg#circle"></use>
        </svg>
    </body>
</html>

img.svg

<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:none;">
    <symbol id="circle" viewBox="0 0 64 64">
        <g>
            <circle cx="32" cy="32" r="32" />
        </g>
    </symbol>
</svg>

0 个答案:

没有答案