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

それが私がアプローチする方法です。一般に、データベースへの呼び出しをできる限り最小限に抑えることを目指す必要があります。つまり、1 回の呼び出しで問題を解決できる場合は、さらに必要な代替ソリューションを探すべきではありません。

ユーザー ID とプロパティ ID の両方に一致する行がない場合、qPropertyInfo 変数は null になるため、それをテストできます。

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

ASP.NET Web ページでクエリがデータを返すかどうかを確認する方法の詳細については、この件に関する私の記事を参照してください。 Query-Returns-Data-In-ASP.NET-Web-Pages

于 2013-09-03T13:30:32.627 に答える