asp.net-core - AspNetCore Api 路由中的 Base64 编码
问题描述
我正在按照RFC 6960中定义的规则创建一个OCSP 响应程序。
所以,我需要实现一个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
我该如何解决这个问题?
解决方案
由 Base64 编码产生的某些字符在 URL 路径中无效。这可以更改,但设置这种方式是有原因的:即出于安全考虑。如果您允许这些角色,您将面临许多其他情况下不可能发生的攻击。
但是,您可以随意将其作为查询字符串的一部分传递。以这种方式处理时,您不会出错。
推荐阅读
- javascript - 使用 React-Bootstrap ListGroup 通过 onClick 触发函数
- python - 如何在数据帧中每两位插入一个符号
- javascript - ReactJS:从父组件道具传递道具到地图是未定义的
- html - Django模板标签变量不起作用
- asp.net - 错误 403 - 禁止访问:访问被拒绝。ASP.NET
- python - 使用 cpu 查找前 5 个进程的 Python 代码
- angular - 条件子路由(Angular)
- javascript - 通过更改一些列在 Laravel 中复制 Eloquent
- excel - 如何检测带有公式的单元格是否为空白?
- firebase - 侧边菜单中的当前用户 Ionic