От клиента обнаружено потенциально опасное значение Request.Form: Какое решение

У меня есть веб-приложение, использующее страницы aspx. Во-первых, я хотел использовать Server.HtmlEncode(value) при отображении значения в LabelledTextBox

public interface ILabelledControl
{
    bool ReadOnly { get; set; }
}

[DefaultProperty("Text")]
[ToolboxData("<{0}:ServerControl1 runat=server></{0}:ServerControl1>")]
public class LabelledTextBox : TextBox, ILabelledControl
{
    //public Unit EditableWidth { get; set; }
    public Unit ReadOnlyWidth { get; set; }

    protected override void Render(System.Web.UI.HtmlTextWriter writer)
    {
        if (this.ReadOnly)
        {
            System.Web.UI.WebControls.Label lbl = new System.Web.UI.WebControls.Label();
            foreach (string att in this.Attributes.Keys)
                lbl.Attributes.Add(att, this.Attributes[att]);
            lbl.Text = this.Text;
            lbl.ForeColor = ForeColor;
            //lbl.Width = this.Width;
            if (ReadOnlyWidth != null)
                lbl.Width = ReadOnlyWidth;
            lbl.CssClass = CssClass;
            lbl.ID = this.ID;
            lbl.RenderControl(writer);
        }
        else
        {

            base.Render(writer);
        }
    }
}

Значение <script>alert("hello")</script> было отображено, но сценарий был выполнен.

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

A potentially dangerous Request.Form value was detected from the client

чтобы оставаться на той же странице, содержащей форму и отображать сообщение об ошибке вверху с общим сообщением типа «Пожалуйста, убедитесь, что весь ввод не содержит таких символов, как '‹' или '>' »

Решение 1. Что я делаю не так?

Решение 2. Как мне обработать это исключение и остаться на той же странице с заполненной формой

Общие. Какое решение лучше?

Спасибо !


person Weedoze    schedule 02.05.2016    source источник


Ответы (1)


От клиента обнаружено потенциально опасное значение Request.Form

Вы видите это исключение сервера, потому что пользователь вводит HTML-тег (например, ‹>) внутри элемента управления Textbox и отправляет форму.

На стороне сервера вы ничего не можете предотвратить. Однако вы можете создать сценарий проверки на стороне клиента и предупредить пользователя или удалить теги.

Например,

<asp:RegularExpressionValidator 
     ID="RegularExpressionValidator1" runat="server"    
     ControlToValidate="MyTextBox"
     ErrorMessage="Please do not enter HTML tags." 
     ValidationExpression="<(.|\n)*?>">
</asp:RegularExpressionValidator>

Предупреждение о значении ("привет") было отображено, но сценарий был выполнен.

Это противоположно описанному выше сценарию. Сервер отображает тег скрипта в браузере.

Чтобы предотвратить это, как вы сказали, вы хотите закодировать строку, используя HttpServerUtility.HtmlEncode перед его преобразованием.

lbl.Text = Server.HtmlEncode(this.Text);
person Win    schedule 02.05.2016
comment
1) Как я могу создать проверку на стороне клиента? Какие символы мне следует удалить? Есть много персонажей, которые могут быть опасными, я ошибаюсь? 2) Я попытался использовать HtmlEncode - значение отображается, но все еще выполняется - person Weedoze; 02.05.2016
comment
1) Обновил первый ответ. 2) Достаточно HtmlEncode. Пожалуйста, сначала протестируйте его в стандартном элементе управления TextBox, а не в настраиваемом серверном элементе управления. - person Win; 02.05.2016