Запретить пользователю вводить HTML для редактирования значения элемента управления - на стороне сервера - PullRequest
0 голосов
/ 27 июня 2019

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

Мой вопрос заключается в том, как я могу обеспечить контроль, чтобы пользователь не мог изменить значение?

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

public enum UserRole {
   Standard,
   Administrator,
   [...]
}

//For this example, my custom control is derived from HtmlInputText.  [ToolboxData("<{0}:MyCustomControl runat=\"server\"></{0}:MyCustomControl>")]
public class MyCustomControl: System.Web.UI.HtmlControls.HtmlInputText
{
    public UserRole? MinimumRoleRequired { get; set; }

    protected override void OnLoad(EventArgs e)
    {
        //Simplified version
        if (this.Page.CurrentUser.Role < this.MinimumRoleRequired) 
        {
            this.Visible = false;
            this.Disabled = true;
            return;
        }
        [...]
    }

    protected override void Render(HtmlTextWriter writer)
    {
        if (!this.Visible || this.Disabled)
        {
            return;
        }
        [...]
    }
[...]
}
//My page who contain the control:

//HTML (MyPage.aspx)
<Controls:MyCustomControl ID="tbAdminOnly"runat="server"></Controls:MyCustomControl>


//C# (MyPage.aspx.cs)
public partial class UserEdit : Page
{
    protected override void OnInit(EventArgs e)
    {
       this.tbAdminOnly.MinimumRoleRequired = UserRole.Administrator;  
       [...]
    }

    protected override void OnLoad(EventArgs e)
    {
      base.OnLoad(e);
        if (this.IsPostBack)
        {
            string postBackValue = tbAdminOnly.Value;
            return;
        }
        tbAdminOnly.Value = "Hello world!";
    }
}

Когда я загружаю страницу как обычный пользователь, элемент управления не отображается.Но если я вставлю ввод в html-страницу

//Note, i need to know the valid name/id but it could be done.
<input type="text" name="tbAdminOnly" id="tbAdminOnly" value="Damn shit">

, то postBackValue теперь является новым значением из введенного ввода.Как я могу предотвратить это?

Спасибо.

1 Ответ

0 голосов
/ 27 июня 2019

Чтобы пользователь не вводил элементы управления html, вам необходимо санировать входные данные.Есть похожие посты. Как использовать C # для очистки ввода на HTML-странице?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...