【发布时间】:2018-06-04 17:41:26
【问题描述】:
我有一个 ASP.NET MVC(不是 ASP.NET Core)单页应用程序,前端带有 angular js。
我的客户端(浏览器)通过 ASP.NET Web API 与服务器通信。现在,Web 应用程序在 https 上,但在 anonymous 上。没有登录/用户身份验证。
网络应用程序采用向导的形式,用户可以在其中来回添加或更新网页上的输入字段。然后通过 Web API 在服务器上更新表单输入值。
我正在寻找一种方法来单独保护我的 Web API 调用,尤其是 POST/PUT 请求。总之,我想阻止任何用户直接从 POSTMAN 或 Fiddler 调用我的 Web API。 Web API 虽然是匿名的,但只能从发起请求的浏览器会话中调用。
我有哪些选择可以实现这一目标?
我可以在此处使用 Anti-Forgery 令牌(无需身份验证)吗?
一种方法,我可以想到实现这一点是为每个请求添加一个自定义标头,并在标头中存储某种会话密钥。然后,验证我从客户端收到的每个请求的自定义标头。是否有其他方法可以在不使用自定义解决方案的情况下实现这个开箱即用或一些经过验证的库?
如果我必须采用上述自定义解决方案,我需要注意哪些陷阱或潜在问题?
【问题讨论】:
-
我花了 20 分钟来构思这个问题。在问这个问题之前,我深思熟虑。我认为这个问题无论如何都不会太宽泛。它在一分钟左右的时间内被否决。是否有足够的时间来回答这个问题?反对者至少可以评论其中“过于宽泛”的内容。它可以帮助我更好地提出问题。我还需要在此处提供什么信息才能使这个问题变得更好?
-
由于您通常无法执行此操作,因此最好添加有关您需要此操作的原因以及您尝试保护的威胁的信息,以便我们提出不同的建议。
-
嗨@Evk,API 端点以javascript 代码提供,任何人都可以查看。我可以缩小 JavaScript,但它仍然只是混淆。由于这些端点对最终用户可见,因此任何人都可以调用端点来添加/更新请求数据。我在表格中获得了用户的一些个人信息,例如他的姓名和年龄。我想阻止用户以外的任何人(在浏览器上)更新此信息。
-
但是如果您有个人信息 - 为什么不像往常一样使用用户名/密码实施身份验证?
-
然后当调查开始时(我将以调查为例,但您可以将其应用于您的案例)-您接受用户识别信息(姓名,年龄),将其存储在数据库中,然后附加 cookie响应的随机字符串(并将该随机字符串与用户信息一起存储在数据库中)。然后,此调查\用户的所有后续请求都需要具有相同随机字符串值的 cookie。
标签: c# asp.net asp.net-mvc