asp.net 剃须刀仅允许登录用户编辑页面



我有这个个人资料编辑页面,但是如果用户在URL中更改id,他可以更改其他用户的个人资料,我如何拒绝访问url中的其他id

 if (!IsPost)
    {
        //if(!Request.QueryString["ID"].IsEmpty()){
        if (!Request.QueryString["UserId"].IsEmpty() && Request.QueryString["UserId"].IsInt())
        {
            UserId = Request.QueryString["UserId"];
            var db = Database.Open("mystring");
            var dbCommand = "SELECT * FROM UserProfile WHERE UserId = @0";
            var row = db.QuerySingle(dbCommand, UserId);
            if (row != null)
            {
                Email = row.Email;
                fullname = row.fullname;
                location = row.location;
            }
            else
            {
                ModelState.AddFormError("No Profile was selected.");

            }
不允许将

用户 ID 作为查询字符串参数传递,而是从加密的表单身份验证 cookie 中读取它。

所以:

var UserId = Request.QueryString["UserId"];

应该变成:

string username = User.Identity.Name;

这将为您提供当前经过身份验证的用户名,然后仅更改他的个人资料。

有很多方法可以做到这一点。

  1. 不要将用户 ID 作为查询字符串传递。在模型对象中传递它

  2. 如果您决定从查询字符串传递用户 ID,并且您设置了身份验证,则可以将查询字符串中传递的用户 ID 与登录用户的用户 ID 进行匹配。如果这两者匹配,则只允许编辑

最新更新