2011-06-04 66 views

回答

1

1)通过[Authorize]属性(optionnaly和允许的角色列表)装饰控制器/动作。

例子:

[Authorize("Manager")] 
public class MyController:Controller 
{ 
    //Each action available only for authorized user 
    [Authorize(Roles = "Admin;Customer")] 
    public ActionResult MyAction() 
    { 
     //This action is available to the user that have a Manager role and one of next roles: Admin, Customer. 
    } 

    public ActionResult AnotherAction() 
    { 
     // This action is available for managers only. 
    } 
} 

2)在你的MVC项目中创建区域,创建基本控制器,通过授权属性的装饰,使从装饰控制器继承面积所有的控制器 - 这是你可以很容易实现管理方式例如,网站的区域。

例子:

[Authorize(Roles = "Admin")] 
public class BaseController: Controller 
{ 

} 


public class My2Controller: BaseController 
{ 
    public ActionResult DoSomething() 
    { 
     //This action is available only for Admin. 
    } 
} 

如果你需要保护的网站从HTML /脚本注入(用户输入......在文本字段“姓”,将收集管理页面数据“所有网站用户”和当你打开你的页面时发布到他的网站) - 你可以使用下一个方法。

  1. 什么也不做 - 默认MVC验证输入,并且不处理HTML标记的请求,并返回错误
  2. 使用验证 - 对多种数据(姓名,电话,日期)的用户不应该有可能使用'<'和'>'。但如果发生意外错误,您不希望用户看到错误页面。比启用客户端验证。
  3. 使用属性[ValidateInput(false)]并对传入的数据进行编码 - 但如果用户确实需要它,则不能输入HTML。
  4. 如果你确实需要用户可以格式化他的信息 - 使用HTML过滤器给出允许的列表中的可能性输入标签。作为例子:http://htmlagilitypack.codeplex.com/
  5. 提供自己的格式话,这将是安全的,如果你需要从跨站点伪造的形式发布,以保护不会使用HTML标签

- 使用[ValidateAntiForgeryToken]属性与@Html.AntiForgeryToken();<form>标签内。此方法生成具有随机值和具有已知键和相同值的cookie的隐藏输入,并且属性检查如果表单包含值,cookie包含值并且表单值等于cookie值。

您可以使用表单上的一组属性和隐藏输入来创建自己的安全规则:例如设置窗体超时。

+0

感谢您使用有关授权安全性的有用代码。其他类型的安全如反黑客安全呢? – user310291 2011-06-04 19:04:27

+0

感谢您更新您的答案。 – user310291 2011-06-05 15:01:22

1

您可以将每个函数调用的授权归因于角色需求。

1

单向用户可以破解您的网站是通过“跨网站请求伪造”,您可以通过使用AntiForgeryToken()来防止它。

// Your View 
@using (Html.BeginForm("Register", "Account")) 
{ 
    // Your Form Fields 
    @Html.AntiForgeryToken("someSalt") 
} 

// Your Controller 
[HttpPost, ValidateAntiForgeryToken(Salt = "someSalt")] 
public ActionResult Register(MyViewModel viewModel) 
{ 
    // Your Code 
} 
+0

感谢这个示例代码。 – user310291 2011-06-05 15:01:07