2016-10-19 1 views
1

Так что я просто наткнулся на огромную дыру в безопасности, я никогда не был в курсе:Как устранить неуверенность отключенных элементов управления ASP.NET, в общем?

обычно работают на жидком, когда я установил Enabled = false на какого-либо контроля, я бы предположить, что это не позволит мне изменить значение на контроле у ​​всех. Однако, когда клиент удаляет разметку disabled="disabled", а также класс aspNetDisabled, таким образом, отправляя другое значение, ASP.NET примет его, даже если мой элемент управления отключен на стороне сервера.

Пример ASPX:

<asp:TextBox ID="tbUsername" runat="server" CssClass="form-control focus-popover required" MaxLength="32" Enabled="false" Text="test" /> 
<asp:Button ID="bSave" runat="server" CssClass="bb btn btn-primary btn-block" Text="Submit" OnClick="bSave_Click" /> 

Пример Code-Behind:

protected void bSave_Click(object sender, EventArgs e) 
{ 
    Console.Write(this.tbUsername.Text); // BREAKPOINT HERE 
} 

После дальнейшего осмотра я обнаружил, что я могу установить ReadOnly = true, что не сбрасывает значение независимо от того, была опубликована. ReadOnly не доступен на всех WebControl с.

Есть ли общий способ принудительно сбросить значение, когда оно отключено? Установка submitdisabledcontrols="false" на form не влияет.

Btw, было бы безопасно запросить Enabled перед чтением значения, или может Enabled быть изменен клиентом на стороне сервера? То есть if(this.tbUsername.Enabled) obj.Username = this.tbUsername.Text; безопасен для извлечения данных?

ответ

3

Не доверяйте пользовательскому интерфейсу.

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

Уровень бизнес-логики должен проверять все данные.

Я решил, что элементы управления доступны для редактирования в зависимости от прав прав доступа пользователя, доступ к веб-сайт

Вы можете открыть инструменты разработчика в браузере (например, нажав клавишу F12 на IE/EDGE) и удалите флаг только для чтения на любом элементе управления. Этого недостаточно, если вы заботитесь о том, чтобы опытный пользователь обходил вашу систему разрешений.

+0

Конечно, правильный ответ, но легче сказать, чем сделать с таким толстым абстракционным слоем, как классический ASP.NET обеспечивает ... удачу OP с этим! ;) – Lucero

+0

Этот ответ верен, это должно быть задачей BLL. Лень пытается снова управлять мной. Дело в том, что я решаю, какие элементы управления редактируются в зависимости от прав доступа пользователя, который обращается к веб-сайту. Мой BLL проверяет значения моего объекта, но не реализует систему разрешений для проверки ввода на основе пользователя, который отправляет объект. Наличие моего BLL, делающего все это, делает его просто ................. настолько тяжелее. – modiX

+2

@modiX, я переключился на ASP.NET MVC, когда это вышло и никогда не оглядывалось назад. Тяжесть, сложность, неудовлетворенность клиентов и т. Д. Веб-форм ASP.NET никогда не была моей чашкой чая и видя, что такие должности просто подтверждают мой выбор. Удачи с исправлением! – Lucero