0

我有这个个人资料编辑页面,但是如果用户更改了 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.");


            }
4

2 回答 2

0

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

所以:

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

应该变成:

string username = User.Identity.Name;

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

于 2012-06-21T09:45:24.550 回答
0

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

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

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

于 2012-06-21T09:46:39.123 回答