Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 有没有办法隐藏/编码或保护ajax调用?_Jquery_Ajax_Json_Asp.net Mvc_Google Chrome Devtools - Fatal编程技术网

Jquery 有没有办法隐藏/编码或保护ajax调用?

Jquery 有没有办法隐藏/编码或保护ajax调用?,jquery,ajax,json,asp.net-mvc,google-chrome-devtools,Jquery,Ajax,Json,Asp.net Mvc,Google Chrome Devtools,我目前正在学习Asp.NETMVC,我来自WebForms背景,我正在实现Ajax请求来调用返回Json对象的控制器方法。但我现在面临的问题是,当我想执行某些操作直到用户达到某个阶段,例如附加一个传统的文本输入,添加一个保存按钮,创建一个新的选项列表,问题是当用户通过身份验证时,我可以 从开发者控制台(例如Google Chrome)执行ajax调用,并获取或发送该特定方法所需的json对象,即使该方法在用户正确登录并设置了AntiForgeryToken后具有[Authorize]属性,但只需

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

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

谢谢。

作为附加的可选参数

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

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

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

更新

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

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

作为附加的可选参数

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

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

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

更新

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


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

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


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

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


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

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


JK.

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



JK.

你在问什么?您是否试图询问是否有一种方法可以允许来自代码的ajax调用,但如果它们是在控制台中手动键入的,则会阻止它们?@Scott Selby-是的,类似的事情。您永远无法做到这一点,如果该网站的用户拥有相关控制器的权限,那么从控制台发出的任何ajax调用都将具有相同的会话和相同的cookie,并将被授予相同的权限。您在问什么?您是否试图询问是否有一种方法可以允许来自代码的ajax调用,但如果它们是在控制台中手动键入的,则会阻止它们?@Scott Selby-是的,类似的事情。您永远无法做到这一点,如果网站用户拥有相关控制器的权限,那么从控制台发出的任何ajax调用都将具有相同的会话和相同的cookie,并将被授予相同的权限。我知道我需要进行服务器端检查,但问题是当用户伪造控制台的请求,并且他/她经过身份验证和验证时可能有多个。您不能伪造您在网站上没有足够权限的请求。如果您的网站已经授予了足够的权限,那么您为什么要担心控制台的情况?我的意思是,当用户被允许时,但验证可能很多,比如,用户是否被授权?该选项有效吗?允许输入吗?允许检查选项吗?该注释正确吗?,验证可以在客户端进行,以使他/她了解允许他/她做什么,但可能需要花费时间进行两次,客户端和服务器端如果您陈述了您试图解决的具体问题,则可能会有所帮助。这是大多数web开发人员不会花时间担心的事情。如果你的案子有什么特别的地方,如果我们理解您为什么需要这样做,您可能会得到更好的答案。我知道我需要进行服务器端检查,但问题是当用户伪造控制台的请求,并且他/她已通过身份验证,验证可能会很多。您不能伪造您尚未从网站获得足够权限的请求。如果您的网站已经授予了足够的权限,那么您为什么要担心控制台的情况?我的意思是,当用户被允许时,但验证可能很多,比如,用户是否被授权?该选项有效吗?允许输入吗?允许检查选项吗?该注释正确吗?,验证可以在客户端进行,以使他/她了解允许他/她做什么,但可能需要花费时间进行两次,客户端和服务器端如果您陈述了您试图解决的具体问题,则可能会有所帮助。这是大多数web开发人员不会花时间担心的事情。如果您的案例有什么特别之处,如果我们理解您为什么需要这样做,您可能会得到更好的答案。因此,最好的办法是在我的ajax调用中添加类似于层的保护令牌,让精通技术的用户更难过日子,因为他不知道这些令牌如何正确工作。@jecarfor:这没有帮助。如果他们已经使用任何浏览器中可用的网络跟踪观察到有效请求的外观,他们可以从控制台或他们自己的应用程序发出相同的请求。不,这根本不是我说的,如果允许用户执行某个操作,那么他们可以执行该操作就这么简单,如果您担心他们调用该操作的次数太多,那么您可以根据调用的次数进行保护,但我无法想象有必要这样做,因此最好的办法是通过在我的ajax调用中添加类似于层的保护标记,让精通技术的用户生活更加困难,他不知道它们是如何正常工作的。@jecarfor:那没用。如果他们已经使用任何浏览器中可用的网络跟踪观察到有效请求的外观,他们可以从控制台或他们自己的应用程序发出相同的请求。不,这根本不是我说的,如果允许用户执行某个操作,那么他们可以执行该操作就这么简单,如果你担心他们会多次调用该操作,那么你可以针对调用的次数进行保护,但我无法想象有必要这样做的情况