我有这个个人资料编辑页面,但是如果用户在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;
这将为您提供当前经过身份验证的用户名,然后仅更改他的个人资料。
有很多方法可以做到这一点。
-
不要将用户 ID 作为查询字符串传递。在模型对象中传递它
-
如果您决定从查询字符串传递用户 ID,并且您设置了身份验证,则可以将查询字符串中传递的用户 ID 与登录用户的用户 ID 进行匹配。如果这两者匹配,则只允许编辑