我目前正在学习Asp.Net MVC(我来自WebForms背景),我正在实现Ajax请求来调用返回Json对象的控制器方法。但我面临的问题是,当我想要执行某些操作直到用户达到某个阶段时,例如添加一个aditional文本输入,添加一个保存按钮,创建一个新的选项列表,问题是当用户我可以验证 从开发者控制台(例如Google Chrome)执行ajax调用并获取或发送该特定方法所需的json对象,即使该方法具有[Authorize]属性(当用户被正确记录时)并且设置了AntiForgeryToken, jQuery的,MVC的小知识,一看就网络标签(在Chrome浏览),我可以假呼叫是由于用户操作我从代码允许的,而它从控制台制造执行(我测试自己和它的工作)。我知道我需要执行双方验证,客户端和服务器端。当验证不多时,这不是问题,但是当数量增加时,这可能是单调乏味的。
是否有任何方法可以进行更安全的ajax调用,例如编码或隐藏,或者根据您的知识,在发出这些请求时最佳做法是什么。我会对网络资源或书籍感到满意,在那里我可以获得有关该主题的正确信息(我搜索但没有找到任何明确或特定的关于我的问题,我可能会以错误的方式搜索)
感谢。
答案 0 :(得分:0)
AuthorizeAttribute作为附加的可选参数Roles
获取或设置有权访问控制器或操作方法的用户角色。
一种选择是在用户能够达到某些控制器操作(通过Ajax或其他方式)时为用户分配特殊角色,并使用Roles参数控制访问。
另一种选择是在控制器中执行您自己的检查,以查看该用户是否符合您认为访问操作所需的任何标准,如果没有则返回错误。
<强>更新强>
有没有办法让更安全的ajax调用,比如编码或隐藏,或根据你的知识,在提出这些请求时最佳做法是什么。
您永远不会信任客户端应用程序。对于Web客户端应用程序来说更是如此,因为操作客户端(浏览器)的工具非常强大且易于使用。绝对没有办法阻止某人使用控制台触发他们拥有有效凭据的Ajax命令。
答案 1 :(得分:0)
如果网站的用户拥有相关控制器的权限,那么你永远无法做到这一点 - 那么从控制台发出的任何ajax调用将具有相同的会话和相同的cookie,并将被授予相同的权限 -
你可以做的是为每个ajax调用添加一些令人讨厌的令牌作为额外的身份验证,但是用户可以再次查看ajax流量并将该令牌复制并粘贴到他们的ajax调用中。
答案 2 :(得分:-1)
Ajax调用安全起来有点棘手。令牌将有助于阻止跨域请求。但是同一个用户可以使用同一个呼叫访问其他信息。一种好的技术是使用基于asp.net身份声明的授权,或者只是在控制器中为用户和相关数据进行检查。如果该用户与他/她请求的数据没有关系,则抛出异常。
JK。