asp net mvc中表单操作属性的风险是什么?

时间:2015-12-04 19:41:53

标签: asp.net asp.net-mvc asp.net-mvc-4 asp.net-mvc-5

我想知道在asp.net mvc环境中使用带有action属性的表单可能存在的风险吗?

例如;创建视图具有< form action =" / Person / Create" ...>在html标记上。

有人可以用fiddler发送帖子到mydomain.com/Person/Create(例如)吗?

它在Jquery ajax脚本中也非常相似。在html标记上可以看到post或get方法的名称。 Everbody可以看到我页面的html源代码。这意味着有人可以看到我的行为'名。

我如何才能对这个问题采取安全的方法?

当然我可以在httppost动作上拥有Bind属性。但我的愿望是做出我的行动'名字秘密或有最佳实践的想法。 (如果可能的话)

谢谢你的一切。

4 个答案:

答案 0 :(得分:4)

您无法隐藏自己的行为,但是您可以使用ASP.NET内置的Anti Forgery Tokens来完成这方面的基本安全策略。 https://msdn.microsoft.com/en-us/library/dd470175(v=vs.118).aspx

在表单中,使用内置的HTML Helper放置一个标记:

selectedStore

然后在您的操作中,放置相应的属性:

@Html.AntiForgeryToken()

现在,您无法针对控制器操作模拟POST请求。

...正如Sedat正确指出的那样:绝对而且很明显,是的,如果您不希望他们匿名执行,您的行为应始终通过您的操作,控制器或其他更深层机制的授权属性来保护一般公众。

答案 1 :(得分:1)

Theres无需隐藏该信息,您希望客户端知道将数据发送到何处。他们如何做到这一点并不取决于您,通过浏览器,Fiddler或其他客户端程序。更重要的是,由GET或POST产生的Actions是安全的。绑定属性,例如保护你免受重叠。

Emilio's解决方案会模糊您的操作名称,这对于提高网址的可读性很有帮助,但不会使其更安全,因为现在攻击者会看到公开名称,无论如何它们都将被路由到您的操作。

答案 2 :(得分:1)

如果你指的是这个,我现在不知道。 但是,如果您不希望客户端用户知道您的操作名称,您可以使用ActionName属性更改操作:

public class ProductsController {

    [ActionName("PublicName")]
    public ActionResult SecretName() {
        return View();
    }

}

从客户端导航的网址为http://yoursite/Products/PublicName而不是http://yoursite/Product/SecretName

您无法完全隐藏自己的动作。因为你有小提琴手,你可以看到从客户端到服务器的任何请求,这样你就可以通过这种方式知道动作的名称。

答案 3 :(得分:1)

不要隐瞒你的行为。

通过执行授权来避免未经授权的访问。

通过使用反请求伪造令牌(如@ Moby的Stunt Double的答案),防止操纵授权人员不情愿地执行操作(也称为XSRF攻击)。