【问题标题】:Is there any way to hide/encode or protect an ajax call?有什么方法可以隐藏/编码或保护 ajax 调用?
【发布时间】:2015-07-13 09:00:56
【问题描述】:

我目前正在学习 Asp.Net MVC(我来自 WebForms 背景)并且我正在实现 Ajax 请求以调用返回 Json 对象的控制器方法。但是我正面临的问题是当我想执行某些操作直到用户达到某个阶段时,例如附加一个附加文本输入,添加一个保存按钮,创建一个新选项列表,问题是当用户经过身份验证我可以 从开发人员控制台(例如 Google Chrome)执行 ajax 调用并获取或发送该特定方法所需的 json 对象,即使该方法具有 [Authorize] 属性(当用户正确登录时)并且设置了 AntiForgeryToken,对 jQuery、MVC 和网络选项卡(在 Chrome 中)有一点了解,我可以假装调用是由于我从代码中允许的用户操作而不是从控制台进行的(我测试了自己并且它有效) )。我知道我需要执行双面验证,客户端和服务器端。当验证不多时,这不是问题,但是当验证数量增加时,这可能会很乏味。

是否有任何方法可以进行更安全的 ajax 调用,例如编码或隐藏,或者根据您的知识,发出这些请求时的最佳做法是什么。我会很高兴有网络资源或书籍,我可以在其中获得有关该主题的正确信息(我进行了搜索,但没有找到任何关于我的问题的明确或具体的内容,我可能搜索方式错误)

谢谢。

【问题讨论】:

  • 你在问什么?您是否想问是否有办法允许来自代码的 ajax 调用,但如果它们是在控制台中手动输入的,则阻止它们?
  • @Scott Selby - 是的,类似的。
  • 如果网站的用户对相关控制器具有权限,您将永远无法做到这一点 - 那么从控制台进行的任何 ajax 调用都将具有相同的会话和相同的 cookie,并且将授予相同的权限

标签: jquery ajax json asp.net-mvc google-chrome-devtools


【解决方案1】:

Ajax 调用的安全性有点棘手。令牌将有助于阻止跨域请求。但是同一用户可以使用同一呼叫访问其他信息。一个好的技术是使用 asp.net 基于身份声明的授权,或者只是在控制器中检查用户和相关数据。如果该用户与他/她请求的数据没有关系,则抛出异常。

JK。

【讨论】:

    【解决方案2】:

    AuthorizeAttribute 作为附加的可选参数Roles

    获取或设置有权访问控制器或操作方法的用户角色。

    一种选择是在用户应该能够访问某些控制器操作(通过 Ajax 或其他方式)时为其分配一个特殊角色,并使用 Roles 参数控制访问。

    另一种选择是在控制器中执行您自己的检查,以查看该用户是否满足您认为访问操作所需的任何条件,如果不满足则返回错误。

    更新

    有没有什么方法可以进行更安全的 ajax 调用,例如编码或隐藏,或者根据您的知识,发出这些请求时的最佳做法是什么。

    您永远不能信任客户端应用程序。对于 Web 客户端应用程序来说更是如此,因为操作客户端(浏览器)的工具非常强大且易于使用。您绝对无法阻止某人使用控制台触发他们拥有有效凭据的 Ajax 命令。

    【讨论】:

    • 我知道我需要进行服务器端检查,但问题是当用户伪造来自控制台的请求并且他/她经过身份验证并且验证可能很多时。
    • 您不能“伪造”您网站上没有足够权限的请求。如果您的网站已经授予足够的权限,那您为什么还要担心控制台案例?
    • 我的意思是当用户被允许但验证可能很多时,用户是否被授权?该选项是否有效?是否允许输入?是否允许该检查选项?该评论是否正确?,可以在客户端进行验证,以使他/她了解他/她可以做什么,但在客户端和服务器端进行两次验证可能会很耗时
    • 如果您陈述您要解决的具体问题,可能会有所帮助。这是大多数 Web 开发人员不会花时间担心的事情。如果您的案例有什么特别之处,如果我们了解您为什么需要这样做,您可能会得到更好的答案。
    【解决方案3】:

    如果网站的用户对相关控制器具有权限,那么您将永远无法做到这一点 - 那么从控制台进行的任何 ajax 调用都将具有相同的会话和相同的 cookie,并且将被授予相同的权限 -

    您可以做的是在每个 ajax 调用中添加一些长的烦人的令牌作为额外的身份验证,但是用户可以再次查看 ajax 流量并将该令牌复制并粘贴到他们的 ajax 调用中。

    【讨论】:

    • 所以最好的办法是通过在我的 ajax 调用中添加保护令牌之类的层来让精通技术的用户生活更加艰难,因为他不明白它们是如何正常工作的。
    • @jecarfor:这无济于事。如果他们已经观察到有效请求的样子(使用任何浏览器中可用的网络跟踪),他们就可以从控制台或他们自己的应用程序中触发相同的请求。
    • 不-这根本不是我要说的,如果允许用户执行某项操作-那么他们就可以执行该操作,这很简单,如果您担心他们会这样称呼动作太多次,那么你可以防止它被调用的次数,但我无法想象有必要这样做的情况
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多