1

我的网站上有一个页面,用户可以在其中更新数据库中的属性信息。目前,使用如下查询字符串提取属性详细信息:

http://somedomain.com/account/PropertyRooms.cshtml?propertyid=18

我遇到的问题是,我只希望用户能够更新他们自己的属性,而不是其他人。目前,任何用户都可以手动更改查询字符串并编辑另一个属性。

我正在尝试使用“AutheticatedUser”值的变体来锁定它,并将其与表中的“ownerID”列匹配。如果它们不匹配,我想重定向到错误或登录页面?这是我当前的配置,部分有效。

@{
Layout = "~/_SiteLayout.cshtml";

WebSecurity.RequireAuthenticatedUser();

var CurrentUser = WebSecurity.CurrentUserId; 

var db = Database.Open("StayInFlorida");

var rPropertyId = Request.QueryString["PropertyID"];

var Propertyinfo = "SELECT * FROM PropertyInfo WHERE PropertyID=@0 AND OwnerID=@1";
var qPropertyinfo = db.QuerySingle(Propertyinfo, rPropertyId, CurrentUser);
}

<h2>Property Information</h2>
   <form method="post" action="">
      <fieldset>
         <label>Property ID</label>
         <input class="input-mini" id="disabledInput" type="text" value="@qPropertyinfo.PropertyID" placeholder="Disabled input here..." disabled>
      </fieldset>
   </form>

我需要知道这是否是保护我的网站的最佳方式,还是我应该先运行单独的 SQL 查询来检查?如果我做得对,如果由于 OwnerID 和 PropertyID 不匹配而导致页面失败,我需要添加什么代码?

谢谢,加文

4

1 回答 1

1

这就是我接近它的方式。您通常应该尽可能减少对数据库的调用。换句话说,如果您可以通过一个电话解决问题,那么您不应该寻找需要更多的替代解决方案。

如果没有行同时匹配用户 id 和 propertyid,则 qPropertyInfo 变量将为空,因此您可以对此进行测试:

@if(qPropertyInfo != null){
    //let them update their details
}
else{
    //display a no results found message
}

您可以在我关于该主题的文章中阅读有关如何检查查询是否在 ASP.NET 网页中返回数据的更多信息:http: //www.mikesdotnetting.com/Article/214/How-To-Check-If-A-查询返回数据在 ASP.NET 网页中

于 2013-09-03T13:30:32.627 回答