使用asp mvc 4。
当用户转到学生记录时,URL显示:
http://studentTracker.org/Record/Student?studentId=380
目前,用户可以在网址中更改studentId并让学生记录,除非它不存在。如果用户更改了网址,我如何隐藏网址的查询字符串部分,或者在控制器上检测/验证?
答案 0 :(得分:1)
首先,您无法阻止用户做任何事情,尤其是更改URL中的ID。您可以做的是确保如果他们这样做,他们会得到类似404或403的内容,而不是实际的内容。
这样做的方法是进行对象级权限,这基本上只是意味着将对象绑定到允许以某种方式查看/编辑它的用户。通常,这将通过外键完成,例如你的"用户"实体或类似团体或角色的更广泛的东西。
例如,如果"学生380"记录归jdoe
所有,然后您可以阻止jdoe
以外的任何人访问该记录,方法是先向您的用户添加外键"你"学生的实体"实体。 (假设身份,因为未指明):
public class Student
{
...
[ForeignKey("Owner")]
public string OwnerId { get; set; }
public virtual ApplicationUser Owner { get; set; }
}
然后,在您的操作中,不是仅通过ID查询,而是通过URL 中的id和验证经过身份验证的用户的ID:
var userId = User.Identity.GetUserId();
var student = db.Students.SingleOrDefault(m => m.Id == studentId && m.OwnerId == userId);
if (student == null)
{
return new HttpNotFoundResult();
}
现在,如果用户更改studentId
但未设置为"所有者"对于匹配的学生,他们将获得404。