IIS:是否可以使用 IIS 工具(即 URL 重写模块)修改收到的每个请求的文件内容?

问题描述 投票:0回答:1

我有一个 Angular 应用程序 + NET 8 API 一起托管在 IIS 站点中。

我正在尝试使用“nonce”(仅使用一次的数字)来实施内容安全策略。这意味着对于发送到客户端的每个响应,我必须在传递之前在 index.html 中设置一个新的“随机数”。

IIS 是否能够为收到的每个 HTTP 请求生成一个新的随机数,并在将其发送到 HTTP 响应中的客户端之前替换我的 index.html 中的变量?

我尝试使用 IIS URL 重写出站规则来做到这一点。但到目前为止我还没能做到。我没有找到在 index.html 中进行替换的方法,也没有找到为每个传入请求自动生成随机数的方法。

angular iis content-security-policy url-rewrite-module nonce
1个回答
0
投票

这并不是真正的答案(并且不完整且未经测试,并且不确定随机数是否是正确的方法),但您可以尝试在program.cs中添加类似的内容:

app.Use((context, next) =>
{
    var requestPath = context.Request.Path.Value;
 if (string.Equals(requestPath, "/", 
            StringComparison.OrdinalIgnoreCase)
            || string.Equals(requestPath, "/index.html", 
              StringComparison.OrdinalIgnoreCase))      
{
using (var rng = RandomNumberGenerator.Create()) {
            var nonceBytes = new byte[32];
            rng.GetBytes(nonceBytes);
            nonce = Convert.ToBase64String(nonceBytes);
       
 context.Response.Cookies.Append("CSP-NONCE",nonce,
    new CookieOptions { HttpOnly = false });
   }
    return next(context);
 }
});

然后在 Angular 中你需要读取该 cookie。 文档说使用:

bootstrapApplication(AppComponent, {
  providers: [{
    provide: CSP_NONCE,
    useValue: globalThis.myRandomNonceValue
  }]
});

但是没有提到如何设置globalThis.myRandomNonceValue。 (但你可以读取 cookie 来设置它......)问题是,由于这是一种 XSS 保护,潜在的攻击者是否也能够读取该随机数? 由于这里涉及的所有复杂性,我认为最好将样式的 CSP 设置为“不安全内联”并跳过随机数部分。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.