Как заставить текстовое поле принимать HTML-теги - PullRequest
1 голос
/ 08 ноября 2011

У меня есть текстовое поле на моей странице aspx.Пользователь хочет иметь возможность вводить HTML-теги в текстовое поле.Насколько я знаю, единственный способ обойти ошибку проверки - установить для ValidateRequest значение false.Я попробовал несколько других способов: (1) использование Server.HtmlEncode в javascript, подобном этому

<%@ Import Namespace="System.Web" %>

        var tb = document.getElementById("<%=synopsisTextBox.ClientID%>");
        var value =Server.HtmlEncode(tb.value);

Но я получил ошибку компилятора.Может кто-нибудь сказать мне, что я сделал не так?

(2) создать свою собственную функцию кодирования

function escapeHTML (str) 
{ 
   var div = document.createElement('div'); 
   var text = document.createTextNode(str); 
   div.appendChild(text); 
   return div.innerHTML; 
}

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

Может кто-нибудь сказать мне, есть ли лучший способ заставить ваше текстовое поле принимать HTML-теги?Спасибо.

Ответы [ 3 ]

4 голосов
/ 15 ноября 2011

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

1 голос
/ 15 ноября 2011

Если вам нужно кодировать HTML-теги и показывать их в браузере , помните, что

 <%= Server.HTMLEncode("The paragraph tag: <P>") %>  

выдает следующий вывод:

The paragraph tag: &lt;P&gt;

, который будет отображаться в веб-браузере как:

The paragraph tag: <P>

Ваша пробная версия с Server.HTMLEncode не работает, так как она работает, когда данные находятся на сервере и должны быть закодированы перед отправкой в ​​просмотры. В вашем примере данные хранятся в браузере, и запрос блокируется при проверке перед получением на сервере .


Если вы хотите, чтобы пользователь редактировал TextBox и вводил HTML-теги , вы можете отключить это с помощью

 <%@ Page validateRequest="false" ...>

или в файле web.config для всего приложения:

<system.web>
  <page validateRequest="false" />
</system.web>

Обратите внимание, что это свойство ValidateRequest не существует без причина. Когда вы меняете значение по умолчанию, небезопасный ввод будет принято. Из-за этого вам нужно проверить ввод каждого пользователя в избегать межсайтовых скриптовых атак, таких как вставка вредоносных программ JavaScript, ActiveX, Flash или HTML


Другим разумным решением является замена с помощью текста JavaScript, написанного пользователем , чтобы сделать его безопасным для проверки.
< tag> вместо <tag> считается безопасным!

function validateTxt() {
    $("textarea, input[type='text']").change(function () {
      html = $(this).val(); //get the value
      //.replace("a" , "b")  works only on first occurrence of "a"
      html = html.replace(/< /g, "<"); //before: if there's space after < remove
      html = html.replace(/</g, "< "); // add space after <
      $(this).val(html); //set new value
   });
}

$(document).ready(function () {
      validateTxt();
});
0 голосов
/ 15 ноября 2011

ИМО, у вас есть следующие решения:

  • Следуйте @Stilgar, а также используйте Anti-XSS для кодирования.
  • Используйте язык разметки Textile или BBCode вместо HTML.
...