【问题标题】:Base64 Encoded in AspNetCore Api RouteAspNetCore Api 路由中的 Base64 编码
【发布时间】:2021-04-21 15:32:39
【问题描述】:

我正在按照RFC 6960 中定义的规则创建一个OCSP Responder

所以,我需要实现一个 GET 服务,其路由必须是:

{url}/{url-encoding of base-64 encoding of the DER encoding of the OCSPRequest}

我创建了我的 GET 操作:

[Route("api/ocsp")]
public class OcspController : Controller
{
    [HttpGet]
    [Route("{encoded}")]
    public async Task<IActionResult> Get(string encoded)
    {
        var ocspHttpRequest = await Request.ToOcspHttpRequest();
        var ocspHttpResponse =  await OcspResponder.Respond(ocspHttpRequest);
        return new OcspActionResult(ocspHttpResponse);
    }
    ...
 }

但是,当 URL 被编码时,ASP.NET Core 没有找到或返回错误请求,这是必要的。

base64 中的 ocsp 请求(注意它有两行):

MEkwRzBFMEMwQTAJBgUrDgMCGgUABBR1vr6HF4T/UsADPXoNr6lpJ1JRowQUJfgJ
6MaP2huu1lFzJOFlkswOcM8CCB6PD3SWpxwf

base64 ocsp请求的url编码:

MEkwRzBFMEMwQTAJBgUrDgMCGgUABBR1vr6HF4T%2FUsADPXoNr6lpJ1JRowQUJfgJ%0A6MaP2huu1lFzJOFlkswOcM8CCB6PD3SWpxwf

我该如何解决这个问题?

【问题讨论】:

    标签: asp.net-core base64 asp.net-core-mvc urlencode asp.net-core-webapi


    【解决方案1】:

    Base64 编码产生的某些字符在 URL 路径中无效。这可以更改,但设置这种方式是有原因的:即出于安全考虑。如果您允许这些角色,您将面临许多其他情况下不可能发生的攻击。

    但是,您可以将其作为查询字符串的一部分 随意传递。这样处理不会出错。

    【讨论】:

    • 可以针对特定的Action进行更改吗?如何改变这个?由于 RFC 规范,我认为我不能使用查询字符串。
    【解决方案2】:

    有一个解决方法,您可以将 {encoded} 更改为 {*encoded},然后它将接受不允许的其他符号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多