2012-03-08 3 views
1

Я все еще новичок в ASP.Net и не понимаю, как исправить следующую проблему.Rich Text vs XSS

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

Итак, как и ожидалось, я получил сообщение об ошибке с сервера.

A potentially dangerous Request.Form value was detected from the client(compteRendu="blablbab<br><br>test<br>"). 

Я попытался исправить это с помощью htmlencoder, но мне не удалось его использовать.

Что я сделал:

<script type="text/VB"> 
    htmlEncode { 
     model.compteRendu = HtmlEncode(model.compteRendu) 
     } 
</script> 

@Using Html.BeginForm(IsPost) 
    @Html.ValidationSummary(True) 
    @<fieldset> 
     <legend>meeting</legend>  
    @Html.HiddenFor(Function(model) model.idmeeting) 
    <div class="editor-label"> 
     @Html.LabelFor(Function(model) model.compteRendu) 
    </div> 
    <div class="editor-field"> 
     @Html.TextAreaFor(Function(model) model.compteRendu) 
     @Html.ValidationMessageFor(Function(model) model.compteRendu) 
    </div> 
    <p> 
     <input type="submit" value="Save" onclick="htmlEncode"/> 
    </p> 
</fieldset> 
End Using 

Итак, что я сделал не так? Я также судимое сделать это внутри контроллера, но я не нашел какой-либо метод, который должен был кодировать HTML-

' POST: /Meeting/Edit/5 

    <HttpPost()> 
    Function Edit(meeting As meeting) As ActionResult 
     meeting.compteRendu = HttpEncode(meeting.compteRendu) 
     If ModelState.IsValid Then 
     ... 

пс: Я не носителем английского языка, извините, если мой английский отстой.

Редактировать: На данный момент мне не нужно больше, чем что-то, что позволяет мне заменить мои «новые линии» на
.

Таким образом, я обнаружил, что я мог сделать ИИТ так:

@Html.Raw(meeting.compteRendu.Replace(System.Environment.NewLine, "<br />")) 

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

+0

Это выглядит, как он мог это отвечает http://stackoverflow.com/questions/81991/a-потенциально-опасный-request-form-value-was-detected-from-the-client –

+0

Я уже нашел/прочитал эту тему. Но я не очень доволен этими решениями. eg: validateRequest = "false" Я также попытался добавить: , но этого было недостаточно для проверки без ошибок того, что мне было нужно. И затем я попробовал HtmlEncode, о котором они говорили, без успеха ... btw, thx на время, потраченное на это исследование –

ответ

3

Вы можете украсить compteRendu свойство на вашей модели представления с атрибутом <AllowHtml>:

<AllowHtml()> 
Public Property compteRendu As String 

Это будет принимать любые символы в этом свойстве. Внутри вашей точки зрения вам не нужно делать никаких кодировок:

@ModelType Meeting 

@Using Html.BeginForm(IsPost) 
    @Html.ValidationSummary(True) 
    @<fieldset> 
     <legend>meeting</legend>  
     @Html.HiddenFor(Function(model) model.idmeeting) 
     <div class="editor-label"> 
      @Html.LabelFor(Function(model) model.compteRendu) 
     </div> 
     <div class="editor-field"> 
      @Html.TextAreaFor(Function(model) model.compteRendu) 
      @Html.ValidationMessageFor(Function(model) model.compteRendu) 
     </div> 
     <p> 
      <input type="submit" value="Save" /> 
     </p> 
</fieldset> 
End Using 

Ни внутри вашего действия контроллера:

' POST: /Meeting/Edit/5 

<HttpPost()> 
Function Edit(meeting As meeting) As ActionResult 
    If ModelState.IsValid Then 
     ... 
    End If 
    ... 
End Function 
+0

Большое спасибо, мне понадобится это в проекте! –