由于我们将图层分离,因此通过安全隔离每个图层应该更容易。与使用Webform相比,ASP.NET中的MVC如何利用此功能更轻松地保护网站?ASP.NET MVC与webform相比如何增强安全性?
通过安全我并不仅仅意味着授权,还包括反黑客安全。
由于我们将图层分离,因此通过安全隔离每个图层应该更容易。与使用Webform相比,ASP.NET中的MVC如何利用此功能更轻松地保护网站?ASP.NET MVC与webform相比如何增强安全性?
通过安全我并不仅仅意味着授权,还包括反黑客安全。
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 /脚本注入(用户输入......在文本字段“姓”,将收集管理页面数据“所有网站用户”和当你打开你的页面时发布到他的网站) - 你可以使用下一个方法。
[ValidateInput(false)]
并对传入的数据进行编码 - 但如果用户确实需要它,则不能输入HTML。- 使用[ValidateAntiForgeryToken]
属性与@Html.AntiForgeryToken();
您<form>
标签内。此方法生成具有随机值和具有已知键和相同值的cookie的隐藏输入,并且属性检查如果表单包含值,cookie包含值并且表单值等于cookie值。
您可以使用表单上的一组属性和隐藏输入来创建自己的安全规则:例如设置窗体超时。
您可以将每个函数调用的授权归因于角色需求。
单向用户可以破解您的网站是通过“跨网站请求伪造”,您可以通过使用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
}
感谢这个示例代码。 – user310291 2011-06-05 15:01:07
感谢您使用有关授权安全性的有用代码。其他类型的安全如反黑客安全呢? – user310291 2011-06-04 19:04:27
感谢您更新您的答案。 – user310291 2011-06-05 15:01:22