サイトに、ユーザーがデータベース内のプロパティ情報を更新できるページがあります。現在、プロパティの詳細は、次のようなクエリ文字列を使用して取得されます。
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 が一致しないためにページが失敗した場合、どのコードを追加する必要がありますか?
ありがとう、ギャビン