带有 AngularJS 的 ServiceStack:JSON 漏洞保护和 XSRF
ServiceStack with AngularJS: JSON Vulnerability Protection and XSRF
AngularJS 文档提供了一些建议来保护 Web 端免受 JSON 漏洞和 XSRF 攻击(https://docs.angularjs.org/api/ng/service/$http 部分 "Security Considerations")。
如何配置 JSON 序列化来为我的 JSON 添加前缀?
为 "X-XSRF-TOKEN" 令牌值获取可验证值的最佳方法是什么,以及如何为每个请求验证该值?
您可以添加一个 GlobalResponseFilter
作为您的 JSON 的前缀:
this.GlobalResponseFilters.Add((req, res, dto) =>
{
if (req.ResponseContentType.MatchesContentType(MimeTypes.Json)
&& !(dto is IHttpResult))
{
res.Write(")]}',\n");
}
});
这将在序列化 JSON 响应之前写入推荐的前缀。
这将防止 JS Array
漏洞,另一种方法是将数组响应包装在 DTO 中,例如:
return new Response { Results = Db.Select<Poco>() };
序列化为 JSON 对象可以避免 JS Array 漏洞。
我更喜欢 returning 对象响应,因为它不会限制您的 JSON 服务只能与适当配置的 JS 应用程序一起使用,并且对象响应更多 forward-compatible/future-proofed 稍后您可以将服务修改为 return 多种 return 类型而不破坏与现有客户端的兼容性。
任何随机字符串都应该成为一个好的标记,例如十六进制编码的随机字节或只是一个新的 Guid。
AngularJS 文档提供了一些建议来保护 Web 端免受 JSON 漏洞和 XSRF 攻击(https://docs.angularjs.org/api/ng/service/$http 部分 "Security Considerations")。
如何配置 JSON 序列化来为我的 JSON 添加前缀? 为 "X-XSRF-TOKEN" 令牌值获取可验证值的最佳方法是什么,以及如何为每个请求验证该值?
您可以添加一个 GlobalResponseFilter
作为您的 JSON 的前缀:
this.GlobalResponseFilters.Add((req, res, dto) =>
{
if (req.ResponseContentType.MatchesContentType(MimeTypes.Json)
&& !(dto is IHttpResult))
{
res.Write(")]}',\n");
}
});
这将在序列化 JSON 响应之前写入推荐的前缀。
这将防止 JS Array
漏洞,另一种方法是将数组响应包装在 DTO 中,例如:
return new Response { Results = Db.Select<Poco>() };
序列化为 JSON 对象可以避免 JS Array 漏洞。
我更喜欢 returning 对象响应,因为它不会限制您的 JSON 服务只能与适当配置的 JS 应用程序一起使用,并且对象响应更多 forward-compatible/future-proofed 稍后您可以将服务修改为 return 多种 return 类型而不破坏与现有客户端的兼容性。
任何随机字符串都应该成为一个好的标记,例如十六进制编码的随机字节或只是一个新的 Guid。