c# - 使用 Windows 客户端应用程序防止跨站点请求伪造攻击

标签 c# asp.net security asp.net-web-api asp.net-web-api2

我通过 web api2 开发了一个网络应用程序。

我的客户端应用程序是一个由 C#、.net 4.0 开发的 Windows 应用程序。 客户端应用程序将一些 Json 数据发送到 Web API 应用程序,应用程序将数据存储在数据库中。

现在的问题是使用除我的应用程序之外的另一种方法发送请求并将转储数据发送到服务器。我在服务器上进行了身份验证,但这还不够,我需要一些 token 来处理这个问题。

经过一些搜索,我找到了 this article并阅读它,但客户端是一个网络应用程序。 我可以在我的 Windows 客户端应用程序中使用此方法吗?如何使用?

最佳答案

底线:你不应该需要。

根据定义,CSRF攻击只能影响跨域共享 cookie 的客户端应用程序。例如如果您使用浏览器访问 www.bank.com,然后打开另一个标签页到 www.evil.com,如果 www.bank.com无法防止 CSRF,那么 www.evil.com 可能会在您登录后向 www.bank.com 提交表单,然后通过伪造的方式转账对转账页面上表单action URL 的请求。

如果您的客户端是 Windows 应用程序,则 HTTP 客户端不应为您的 Web API 以外的任何其他服务存储 cookie。

请注意,以上仅适用于将 cookie 用作 session 管理机制(即不是 Kerberos、NTLM、Basic Auth 等)的情况。

.I have authentication on the server but it isn't enough

这应该足够了,因为攻击者无法伪造对您的 API 的 HTTP 请求,该请求将与受害者的 cookie 一起发送,因为 cookie 是分开的,因为存在不同的 Web 客户端实例。很像在 Chrome 上登录谷歌,然后在 Firefox 上访问谷歌——你们不会共享同一个登录 session 。

当然,请使用 HTTPS 保护您的 API,以便信息在传输过程中得到加密。请注意,这并不能防止源代码被反编译,这是不容易防止的事情。归根结底,您不能信任不受您控制的客户。您可以使阻止某人处理或更改发送到您的 API 的内容变得困难,但并非不可能。

关于c# - 使用 Windows 客户端应用程序防止跨站点请求伪造攻击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24301872/

相关文章:

java - 如何保持为用户提供的下载网址在一分钟内有效,一旦时间过去,网络应用程序应重定向到错误页面

c# - 您如何知道 PayPal 购物车何时被遗弃?

c# - Winforms 登录中的 ASP .NET Core 身份未进行身份验证

c# - C#音频和视频流

c# - 是否有可能采用已经​​使用 VB.NET 启动的半完成 Web 应用程序并继续使用 C#

security - Parse.com API 安全问题

HTML 表格边框不适用于 IE10

asp.net - 从mvc4迁移到mvc5,属性路由不起作用

asp.net - 我可以将我的 .net 4.8 webforms webapp 升级到 .net 5.0 吗?

security - 我应该如何创建我的 DES key ?为什么 7 个字符的字符串不够用?