Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.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
Javascript 在Ajax请求中使用JSON包含服务器端信息的可取性_Javascript_Json_Yui_Security - Fatal编程技术网

Javascript 在Ajax请求中使用JSON包含服务器端信息的可取性

Javascript 在Ajax请求中使用JSON包含服务器端信息的可取性,javascript,json,yui,security,Javascript,Json,Yui,Security,我正在为教师和学生建立一个材料交换网站。这些材料是保密的,因为它是我们的,我们不想让其他老师窃取。另一方面,它没有个人或敏感信息,因此安全性不是一个大问题。如果你偷了我的语法练习,我不会起诉你。我在Codeigniter框架中使用了Ion Auth,对此我很满意。我使用YUI 2.8来显示可编辑的数据表和可编辑的树。基于Codeigniter MVC框架,我有一个控制器来处理Ajax请求。当我通过YUI连接类发布请求时,我会传递一个名为data的序列化对象作为唯一参数,该参数来自客户端组装的JS

我正在为教师和学生建立一个材料交换网站。这些材料是保密的,因为它是我们的,我们不想让其他老师窃取。另一方面,它没有个人或敏感信息,因此安全性不是一个大问题。如果你偷了我的语法练习,我不会起诉你。我在Codeigniter框架中使用了Ion Auth,对此我很满意。我使用YUI 2.8来显示可编辑的数据表和可编辑的树。基于Codeigniter MVC框架,我有一个控制器来处理Ajax请求。当我通过YUI连接类发布请求时,我会传递一个名为data的序列化对象作为唯一参数,该参数来自客户端组装的JSON对象,通过将配置对象传递给YAHOO.si.factory.Method,如下所示:

addTreeNode: new YAHOO.si.factory.Method({
    className: "instructors_model",
    methodName: "add_exercise_tree_node",
    key: "id",
    mode: "child",
    fields: ['n0', 'n1','n2', 'n3'],
    params: [{
        key: "nodeData",
        name: "nodeData",
        type: "text",
        direction: "IN",
        value: "34"
    },{
        key: "name",
        name: "name",
        type: "text",
        direction: "IN",
        value: "Grammar"
    }],
    success: "You have successfully added a node to the tree."      
}),
控制器解析由YAHOO.si.factory.Method组装的JSON字符串,并指出它必须调用讲师模型中的add_exercise_tree_节点并传递2个参数。add_exercise_tree_node方法对数据库执行脏工作,并希望返回一条成功消息。如果是这样,则会在客户端显示成功消息,并更新树以包含新节点

我的问题是,我是否在这个纯文本查询字符串中泄露了太多关于服务器的信息?这是一篇文章,所以它不会出现在URL中,但当然,它在Firebug控制台中是完全可见的


当然,这个问题背后的问题是,对于在MVC框架中分配Ajax的责任,您的安全专家有什么建议?我想要一个只负责处理Ajax请求的控制器的可管理性,所以我最终得到了一个稍微复杂且不安全的解决方案?客户端上的重载。您对此有什么建议?

我在评论中的观点是,您在MVC范式中违背了RESTful体系结构的目的,主要是将重点放在所有AJAX调用转到一个控制器上。所以,让我们把它分解成一些有用的东西,然后重新理解为什么/如何

休息只是意味着,但这不是我们说休息或休息的意思。我们的意思是,我们希望每个URL代表一种资源类型,并使用它来指示我们对每个请求所做的操作。所以GET、POST、PUT等都有一个目的,我们用这个目的来决定我们如何和个人资源交互

所以,让我们把它放在正确的角度来看,让我们用它做点什么;考虑一下HR应用程序,这是人们所采用的那些简单的应用程序之一。我们有人员和部门。部门有一个ID、一个名字和一个经理。人们有一个ID,一个名字,在我们的系统中经理可能是-1表示没有经理,或者一个人的ID和一个电话号码

当我们得到HTTP时,我们会得到一个所有人的目录,这会给我们他们的名字和ID

[ {Name: "Cole Brand", ID: 1}, {Name: "user341180", ID: 2} ]
当我们得到我们得到

当我们得到我们得到

为了完整起见,请提供一份部门清单:

HTTP获取

很明显,我的例子有点枯燥,因为举例来说,员工肯定在一个部门工作,但我没有根据他们的个人资料将他们与该部门联系起来。当然数据库会跟踪,但我们这里没有。这是一个简单的例子

因此,您可以从中看到,没有返回HTML。我们将回到这一点

在下一部分中,请注意我一直在使用HTTPGET。如果我们使用HTTP POST呢?这意味着无论我们通过什么,都会覆盖这些数据。让我举一个简单的例子:

HTTP POST

当我们得到HTTP时,我们现在得到了

{ Name: "user341180", ID: 2, Manager: -1, "Phone Number": "222-555-0089" }
查看我们如何使用HTTPPOST更新记录?这就是我们使用RESTful方法的方式,我们使用动词来表示动作


那么,我们还可以使用什么来与服务器通信呢?如果我们想让RESTful方法同时返回网页和数据,而不是GET呢?我们可以使用HTTP头或者X头?指定我们正在进行数据调用,因此默认情况下,我们向HTTP GET发出请求,并获得一个网页。如果您想要一个rest响应提供网页的示例,请查看我们现在所在的页面。https://stackoverflow.com/questions/11061912/ 我在评论中声称,在MVC范式中,您正在挫败RESTful体系结构的目的,主要集中在所有AJAX调用到一个控制器上。所以,让我们把它分解成一些有用的东西,然后重新理解为什么/如何

休息只是意味着,但这不是我们说休息或休息的意思。我们的意思是,我们希望每个URL代表一种资源类型,并使用它来指示我们对每个请求所做的操作。所以GET、POST、PUT等都有一个目的,我们用这个目的来决定我们如何和个人资源交互

所以,让我们把它放在正确的角度来看,让我们做一些机智的事情 h认为;考虑一下HR应用程序,这是人们所采用的那些简单的应用程序之一。我们有人员和部门。部门有一个ID、一个名字和一个经理。人们有一个ID,一个名字,在我们的系统中经理可能是-1表示没有经理,或者一个人的ID和一个电话号码

当我们得到HTTP时,我们会得到一个所有人的目录,这会给我们他们的名字和ID

[ {Name: "Cole Brand", ID: 1}, {Name: "user341180", ID: 2} ]
当我们得到我们得到

当我们得到我们得到

为了完整起见,请提供一份部门清单:

HTTP获取

很明显,我的例子有点枯燥,因为举例来说,员工肯定在一个部门工作,但我没有根据他们的个人资料将他们与该部门联系起来。当然数据库会跟踪,但我们这里没有。这是一个简单的例子

因此,您可以从中看到,没有返回HTML。我们将回到这一点

在下一部分中,请注意我一直在使用HTTPGET。如果我们使用HTTP POST呢?这意味着无论我们通过什么,都会覆盖这些数据。让我举一个简单的例子:

HTTP POST

当我们得到HTTP时,我们现在得到了

{ Name: "user341180", ID: 2, Manager: -1, "Phone Number": "222-555-0089" }
查看我们如何使用HTTPPOST更新记录?这就是我们使用RESTful方法的方式,我们使用动词来表示动作


那么,我们还可以使用什么来与服务器通信呢?如果我们想让RESTful方法同时返回网页和数据,而不是GET呢?我们可以使用HTTP头或者X头?指定我们正在进行数据调用,因此默认情况下,我们向HTTP GET发出请求,并获得一个网页。如果您想要一个rest响应提供网页的示例,请查看我们现在所在的页面。https://stackoverflow.com/questions/11061912/ 你是否暴露了太多的内部API,有人会用它来重建你的应用程序吗?这就是你要问的吗?关于在MVC框架中分配Ajax的责任,你的安全专家有什么建议?我建议不要比编写框架的人更聪明。然而,你所建议的我想要的是一种可管理性,即只有一个控制器负责处理Ajax请求,而你正在违背MVC的RESTful目的,这正是可行的。虽然该应用程序只针对拥有帐户的已知用户,但安全性非常低,因此我想知道这种方法会在多大程度上使应用程序易受黑客攻击。一个专门的人将始终能够对您的产品进行反向工程。用你现有的时间预算做一些看起来合理的事情,然后继续前进。@jcolebrand在谷歌上搜索链接,寻找一些可以帮助我理解MVC、REST和Ajax的东西,并明智地将它们组合在一起。这是一个雷区。你能推荐一个链接来很好地解释你正在破坏MVC的RESTful功能的巨大想法吗。我认为MVC比REST早很多,不知道MVC应该是RESTful的。你是不是暴露了太多的内部API,有人可以用它来重建你的应用程序?这就是你要问的吗?关于在MVC框架中分配Ajax的责任,你的安全专家有什么建议?我建议不要比编写框架的人更聪明。然而,你所建议的我想要的是一种可管理性,即只有一个控制器负责处理Ajax请求,而你正在违背MVC的RESTful目的,这正是可行的。虽然该应用程序只针对拥有帐户的已知用户,但安全性非常低,因此我想知道这种方法会在多大程度上使应用程序易受黑客攻击。一个专门的人将始终能够对您的产品进行反向工程。用你现有的时间预算做一些看起来合理的事情,然后继续前进。@jcolebrand在谷歌上搜索链接,寻找一些可以帮助我理解MVC、REST和Ajax的东西,并明智地将它们组合在一起。这是一个雷区。你能推荐一个链接来很好地解释你正在破坏MVC的RESTful功能的巨大想法吗。我认为MVC比REST老得多,不知道MVC应该是RESTful的。@jcolebrand这是一个非同寻常的答案。非常感谢。我现在看到了创建URL而不是将JSON字符串添加到数据参数的大致路径。它将更符合Codeigniter生成URL的方法,如:app_root/instructors/add_tree_node/34/grammar,并拥有一系列合适的控制器,就像我开始尝试使用Codeigniter创建Ajax之前所做的那样。哈哈,谢谢,我不知道我是否会称之为非凡,但如果它能提供信息,那么我做得很好。欢迎你提出任何问题,我可以试着澄清,也许我已经给了你一个结构,让你将来思考其他事情。当你浏览网站时,一定要看看事情是如何进行的,因为他们是MVC的,并且有天才的程序员为他们工作。我想我的主要观点是
因为url首先指向一个资源,然后指向该资源上的操作,而不是可能有资源的操作,如果你得到了,那么我做得很好-@马特:我觉得杰科勒布兰德的回答非同寻常。我非常感谢你不辞辛劳地悬赏。我不是一个全职的开发人员,我需要几个月的时间才能掌握答案中的所有内容并在我的应用程序中实现。啊,你们两个,我只是一个简单的人,试图传播想法。David,我的用户名是我的gmail地址,请随时向我提问,但我知道可能需要一两天才能回复你。我可以在这方面写上好几天,但有时我的主题会不同步。我计划写一本关于这类事情的书,向人们介绍这些概念,但我目前正在经历一些医学问题,这些问题会导致人们无法理解的注意力和动机的丧失。所以:-\n有一天。。。总有一天我会想起你的。你的回答特别有用的一点是,它是如此敏感地针对我的水平。我可以生成1000行相当复杂的JavaScript,并且可以非常成功地抛出数据;我需要并得到的是对架构的更高层次的理解。您正确地确定了给出答案的级别。在英语教学中,我们讨论的是当教师在i+1当前水平上提供可理解的输入加上一个See时,习得的发生。你说到点子上了。@jcolebrand这是一个非同寻常的回答。非常感谢。我现在看到了创建URL而不是将JSON字符串添加到数据参数的大致路径。它将更符合Codeigniter生成URL的方法,如:app_root/instructors/add_tree_node/34/grammar,并拥有一系列合适的控制器,就像我开始尝试使用Codeigniter创建Ajax之前所做的那样。哈哈,谢谢,我不知道我是否会称之为非凡,但如果它能提供信息,那么我做得很好。欢迎你提出任何问题,我可以试着澄清,也许我已经给了你一个结构,让你将来思考其他事情。当你浏览网站时,一定要看看事情是如何进行的,因为他们是MVC的,并且有天才的程序员为他们工作。我想我的主要观点是url首先指的是一个资源,然后指的是该资源上的操作,而不是可能有资源的操作,如果你得到了,那么我做得很好-@马特:我觉得杰科勒布兰德的回答非同寻常。我非常感谢你不辞辛劳地悬赏。我不是一个全职的开发人员,我需要几个月的时间才能掌握答案中的所有内容并在我的应用程序中实现。啊,你们两个,我只是一个简单的人,试图传播想法。David,我的用户名是我的gmail地址,请随时向我提问,但我知道可能需要一两天才能回复你。我可以在这方面写上好几天,但有时我的主题会不同步。我计划写一本关于这类事情的书,向人们介绍这些概念,但我目前正在经历一些医学问题,这些问题会导致人们无法理解的注意力和动机的丧失。所以:-\n有一天。。。总有一天我会想起你的。你的回答特别有用的一点是,它是如此敏感地针对我的水平。我可以生成1000行相当复杂的JavaScript,并且可以非常成功地抛出数据;我需要并得到的是对架构的更高层次的理解。您正确地确定了给出答案的级别。在英语教学中,我们讨论的是当教师在i+1当前水平上提供可理解的输入加上一个See时,习得的发生。你说到点子上了。
send this data in the post body { Manager: -1, "Phone Number": "222-555-0089" }
get nothing in response (we could return the object, but my API doesn't for whatever reason, call it a specification deficiency)
{ Name: "user341180", ID: 2, Manager: -1, "Phone Number": "222-555-0089" }