2013-02-11 113 views
0

我有一个MVC4 C#应用程序,我想允许客户端通过代码(无浏览器或视图)访问。客户端将发送用于查找记录的用户ID,并返回三个字段。传入和传出数据都是敏感信息,所以我需要一个安全的解决方案。该应用程序正在使用SSL(https)的网站上运行,如果我使用JSON解决方案,这会保护我免受JSON劫持吗?mvc客户端访问没有浏览器或查看

public ActionResult InAction(string id) 
{ 
    // code to retrieve record and return three fields field1, field2, field3 

    return (what would go here?) 
} 

我可以使用控制器动作来处理吗?我是否需要一个完整的Web服务来做到这一点,如果有的话,任何指向好的MVC教程的链接都会有所帮助?

客户端在ASP(webforms)中工作,并且正在讨论带有键值对的响应者页面,我将如何在MVC中做等效。

任何帮助让我去是非常感谢。

谢谢

更新:我标志着Brett的JSON作为建议的答复。我返回一个字符串(不是数组),整个事务通过SSL连接发生,所以我认为JSON劫持的可能性不是问题。

string response = field1 + "," + field2 + "," + field3; 
    return Json(response), JsonRequestBehavior.AllowGet; } 

如果我错了,请让我知道。

+0

您可能想要使用带有提供JSON数据的ws *协议的wcf服务。 – 2013-02-12 01:37:06

回答

2

由于nikeaa提到,刚刚创建返回JsonResult

public JsonResult InAction(string id) 
{ 
    // get some object from repository 
    var repository = new ObjectRepository(); 
    var returnObj = repository.GetObject(id); 
    return Json(returnObj, JsonRequestBehavior.AllowGet); 
} 

你需要指定JsonRequestBehaviour.AllowGet覆盖默认.DenyGet你控制器内的行动。但是,当通过GET请求返回JSON时,会出现安全漏洞。 See this StackOverflow answer for details.

+0

谢谢,布雷特。我应该提到运行该应用程序的站点是https(ssl),并且我将返回敏感信息。由于我不能在JsonResult上使用[HttpPost],我必须使用.AlowlowGet。我不遵循你的意见,我应该出于安全原因使用它,不是.AllowGet是什么使它容易受到JSON劫持?该链接显示'您不希望在GET请求中使用JSON返回敏感信息。'我怎样才能安全地将敏感信息返回给客户端? SSL会保护我免受JSON劫持吗? – Joe 2013-02-12 01:27:39

+0

@Joe,我编辑了我的回复,我只是说你需要该参数来覆盖默认行为。我不是专家,但我会尽量避免将敏感数据发送到客户端,除非他们已通过身份验证,我想通过SSL更好。另外为了避免JSON劫持,我认为一种方法是确保响应封装在一个对象中而不是一个数组。 – Brett 2013-02-12 11:23:18

+0

我已经标记为答案。我认为.AllowGet的说法仍然令人困惑。我冒昧编辑你的回复,使其更加清晰。谢谢 – Joe 2013-02-12 16:10:54

0

这取决于你想在返回数据的格式例如,如果你想以JSON格式返回的数据,可以使用以下内容:

return (Json(userResultModel)); 

你可能也想将方法的返回类型更改为JsonResult。

相关问题