2013-06-03 2 views
1

У меня есть текстовое поле, где пользователь может вводить фрагмент кода HTMLинъекционное Javascript фрагмент в HTML

Пример: ввод данных пользователем это в поле

// <![CDATA[ 
    <tr> 
     <td> 
      #= Position # 
     </td> 
     <td> 
      #= Description # 
     </td> 
     <td> 
      #= Location # 
     </td> 
     <td> 
      <a href="@Url.Action("Delete")/#= Id #" class="delete-link">Delete</a> 
     </td> 
    </tr> 
// ]]> 

Я сохранить его в базу данных и назвать его по требованию в клиенте Пользовательский интерфейс, как KTemplatePart.Script (KendoUI Template)

VIEW

@Html.Script(
    @<script id="jobTemplate" type="text/javascript"> 
     @Model.KTemplatePart.Script 
    </script> 
) 

Где html.Scri пт является HTML помощником

Моей проблема это деформируется в клиентском интерфейсе

<script id="jobTemplate" type="text/javascript" > 

    &lt;![CDATA[ 

     &lt;tr&gt; 
      &lt;td&gt; 
       #= Position # 
      &lt;/td&gt; 
      &lt;td&gt; 
       #= Description # 
      &lt;/td&gt; 
      &lt;td&gt; 
       #= Location # 
      &lt;/td&gt; 
      &lt;td&gt; 
       &lt;a href=&quot;@Url.Action(&quot;Delete&quot;)/#= Id #&quot; class=&quot;delete-link&quot;&gt;Delete&lt;/a&gt; 
      &lt;/td&gt; 
     &lt;/tr&gt; 

    // ]]&gt; 

     </script> 

Есть обходной путь на этом?

ответ

0

Это по соображениям безопасности, для предотвращения инъекций скриптов, атак.

Разрешение на вставку HTML в DOM оставляет уязвимым приложение, и, таким образом, по умолчанию вход экранирован.

Это не выглядит, как KendoUI имеет встроенный метод для экранирования в HTML, но это достаточно легко сделать:

function htmlDecode(input){ 
    var e = document.createElement('div'); 
    e.innerHTML = input; 
    return e.childNodes.length === 0 ? "" : e.childNodes[0].nodeValue; 
} 

от: Unescape HTML entities in Javascript?

+0

да, я знаю, что, но там все равно отключить его? Я просто делаю это для особого случая ... – lincx

Смежные вопросы