当我扫描我的网站时,我得到了可扩展性CSP:通配符指令。
这是我的响应头:
default-src 'self' 'nonce-A1A858B312C6D596C4CA536BD2D20F67' https:;script-src 'self' 'nonce-A1A858B312C6D596C4CA536BD2D20F67' https: ;style-src 'self' 'nonce-A1A858B312C6D596C4CA536BD2D20F67' https:;connect-src 'self' 'nonce-A1A858B312C6D596C4CA536BD2D20F67' https:;font-src 'self' 'nonce-A1A858B312C6D596C4CA536BD2D20F67' https:;img-src 'self' 'nonce-A1A858B312C6D596C4CA536BD2D20F67' https:;base-uri 'self' 'nonce-A1A858B312C6D596C4CA536BD2D20F67' https:;form-action 'none';frame-src 'self';frame-ancestors 'self'
字符串
(为了便于阅读,下面进行了分解):
default-src 'self' 'nonce-A1A858B312C6D596C4CA536BD2D20F67' https:;
script-src 'self' 'nonce-A1A858B312C6D596C4CA536BD2D20F67' https:;
style-src 'self' 'nonce-A1A858B312C6D596C4CA536BD2D20F67' https:;
connect-src 'self' 'nonce-A1A858B312C6D596C4CA536BD2D20F67' https:;
font-src 'self' 'nonce-A1A858B312C6D596C4CA536BD2D20F67' https:;
img-src 'self' 'nonce-A1A858B312C6D596C4CA536BD2D20F67' https:;
base-uri 'self' 'nonce-A1A858B312C6D596C4CA536BD2D20F67' https:;
form-action 'none';
frame-src 'self';
frame-ancestors 'self'
型
如何解决这个错误?
1条答案
按热度按时间w8rqjzmb1#
根据Web应用程序的要求和安全需求,有几种方法可以修复CSP通配符指令漏洞。以下是一些最佳实践:
1.使用严格的CSP标头:严格的CSP头只允许Web应用程序加载特定的内容源,从而减少攻击面。例如,考虑以下CSP头:Content-Security-Policy:default-src 'self' 'unsafe-inline' 'unsafe-eval' https:;在这个标题中,我们只允许从同一个域('self')加载内容,允许内联脚本和样式('unsafe-inline'),并允许脚本在同一个域上执行('unsafe-eval')。我们还允许从HTTPS源(https:)加载内容。
1.使用nonce属性:nonce属性是由服务器生成的随机值,包含在CSP标头中。它允许Web应用程序执行内联脚本,但前提是这些脚本与nonce值匹配。这可防止攻击者将恶意内联脚本注入Web应用程序。例如,请考虑以下CSP标头:Content-Security-Policy:script-src 'nonce-ABC123' https:;在这个头文件中,我们只允许从HTTPS源(https:)加载脚本,以及匹配nonce值(
'nonce-ABC123'
)的内联脚本。1.使用sha 256属性:sha 256属性类似于nonce属性,但它允许基于其哈希值执行特定的内联脚本。当Web应用程序需要执行无法包含在单独文件中的特定内联脚本时,这很有用。例如,考虑以下CSP标头:Content-Security-Policy:script-src 'sha 256-ABC123' https:;在这个头文件中,我们只允许从HTTPS源(https:)加载脚本,以及具有哈希值ABC123的内联脚本。
1.避免使用unsafe-inline和unsafe-eval指令:unsafe-inline指令允许Web应用程序执行内联脚本和样式,而unsafe-eval指令允许从字符串执行脚本。应避免使用这些指令,因为它们会显著增加Web应用程序的攻击面。
1.定义特定的内容源:在CSP标头中定义内容源时,必须尽可能具体。例如,我们可以定义Web应用程序信任的特定域或子域,而不是允许从任何域(*)加载内容。这减少了攻击面,并提高了应用程序的整体安全性。