Asp.net mvc javascript注入式asp-mvc
我已创建控制器:Asp.net mvc javascript注入式asp-mvc,asp.net-mvc,entity-framework,Asp.net Mvc,Entity Framework,我已创建控制器: [Authorize] [AcceptVerbs(HttpVerbs.Delete)] public ActionResult Delete(int id) { try { db.DeleteObject(db.AEROLINEA.FirstOrDefault(x => x.AEROLINEAID == id)); db.SaveChanges();
[Authorize]
[AcceptVerbs(HttpVerbs.Delete)]
public ActionResult Delete(int id)
{
try
{
db.DeleteObject(db.AEROLINEA.FirstOrDefault(x => x.AEROLINEAID == id));
db.SaveChanges();
}
catch { /* TODO:Display message*/ }
return View();
}
如果我在firebug中执行下一个javascript,任何登录的人都可以删除航空公司,即使他没有删除的权限
var action = "/Airline/Delete/" + recordId;
var request = new Sys.Net.WebRequest();
request.set_httpVerb("DELETE");
request.set_url(action);
request.add_completed(deleteCompleted);
request.invoke();
如何避免此问题?您可以筛选角色: 示例:
[Authorize(Roles="Admin")]
[AcceptVerbs(HttpVerbs.Delete)]
public ActionResult Delete(int id)
{
try
{
db.DeleteObject(db.AEROLINEA.FirstOrDefault(x => x.AEROLINEAID == id));
db.SaveChanges();
}
catch { /* TODO:Display message*/ }
return View();
}
或者在视图中将AntiforgeryToken与多汁盐一起使用。[Authorize]不带参数允许您指示用户必须登录。您还可以指定有权访问您的操作的用户/角色授权验证您是否有权访问该视图?或者只验证您是否已登录?它检查登录的用户是否处于角色中,例如:“Admin”,这意味着他是否有权访问特定的操作方法。但是你必须先创建角色。这对我不起作用,因为用户可以通过友好方式创建新角色。但真正的问题是:如果有人有权访问delete方法,他可以传递id中的任何内容,并且可以删除任何航空公司,即使该航空公司未在视图中列出(因为他没有对该航空公司的权限)然后,您可以创建一个从authorized属性继承的操作筛选器,您可以在其中动态选择角色我认为如果我发送整个实体而不仅仅是一个id,这是可能的吗?AntiforgeryToken非常有趣,但它不能解决我的问题,但很高兴知道它存在,谢谢