Безопасно ли иметь невидимый элемент управления ASP.NET? - PullRequest
1 голос
/ 27 марта 2012

Например, скажем, у меня есть столбец gridview, который имеет важные элементы управления,

Безопасно ли, если я сделаю их невидимыми для обычных пользователей и видимыми для администраторов?

If (Requst.Servervariables.Get("LOGON_USER").Split('\\')[1] == "MyAdminUser")
{
     gridview1.columns[0].visible = true;
}

Ответы [ 2 ]

5 голосов
/ 27 марта 2012

Элемент управления сохраняется в Viewstate, даже если для видимости установлено значение false.Состояние не зашифровано, оно просто закодировано в Base-64.Теоретически, возможно проанализировать состояние просмотра и извлечь значения , поэтому это не на 100% безопасно, но большинству людей будет сложно использовать слабость и извлечь значения.

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

И, конечно, попрактикуйтесь в углубленной защите.

Простое скрытие элементов управления известно как «Безопасность от неясности», что вовсе не так уж и много.Это действительный дополнительный уровень безопасности, но вы абсолютно не должны полагаться на него (например, скрывать ссылки на конфиденциальную информацию, предполагая, что вы не сможете получить ее, если не знаете URL).Если вы используете его для скрытия ссылок, вам все равно нужно защищать эти страницы с такой же тщательностью, как если бы ссылки не были «скрыты».Злоумышленники могут найти такие «скрытые» ссылки разными способами.

1 голос
/ 27 марта 2012

В дополнение к ответу @David.Вы можете выполнить форматирование этого столбца в своем событии RowBoundData.

В случае, если вы не являетесь администратором, не устанавливайте текст для этого элемента управления.

protected void grd_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        Label SecuredColumn = (Label)e.Row.FindControl("SecuredColumn");
        if (Request.ServerVariables.Get("LOGON_USER").Split('\\')[1] == "MyAdminUser")
        {
            SecuredColumn.Text = ((YourClass)e.Row.DataItem).YourPropertyName;
            SecuredColumn.Visible = true;
        }
        else
        {
            SecuredColumn.Visible = false;
        }
    }
}
...