2013-09-03 4 views
1

У меня есть страница на моем сайте, где пользователь может обновлять информацию о свойствах в базе данных. В настоящее время детали собственности вытягивают с помощью строки запроса, как это:Защита доступа к базе данных - webmatrix

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

Проблема у меня есть, это то, что я только хочу, чтобы пользователи могли обновить свое имущество, а не другие. В настоящее время любой пользователь может вручную изменить запрос и изменить другое свойство.

Я пытаюсь заблокировать это, используя изменение значения «AutectedatedUser» и сопоставив его с столбцом «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 [email protected] AND [email protected]"; 
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, чтобы проверить в первую очередь? Если я делаю это правильно, какой код мне нужно добавить, если страница терпит неудачу, потому что PropertyID и PropertyID не совпадают?

Спасибо, Гэвин

ответ

1

То есть, как я бы подойти к нему. Вы должны, как правило, стремиться минимизировать обращения к базе данных настолько, насколько это практически возможно. Другими словами, если вы можете решить проблему одним вызовом, вам не следует искать альтернативные решения, требующие большего.

Если строки не совпадают как идентификатор пользователя и 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-Query-Returns-Data-In-ASP.NET-Web-Pages

+0

И вы имеете в виду сделать это в блоке кода или в теле страницы? – Gavin5511

+0

Это зависит от дизайна вашего приложения. Я написал этот фрагмент, исходя из предположения, что вы поместите его в тело страницы, но вы можете поместить его в блок кода и перенаправить на другую страницу, если не найдено подходящего свойства. Это полностью зависит от вас. –

+0

ОК, позвольте мне попробовать оба сценария, и я сообщу, если у меня возникнут проблемы. но я прочитал вашу статью, и это имеет смысл, так что должно быть хорошо. – Gavin5511

Смежные вопросы