2009-08-04 19 views
6

Aparece este error cuando publico desde TinyMCE en una vista ASP.NET MVC.Validación detectada entrada de cliente peligrosa: publicación desde TinyMCE en ASP.NET

error:

Request Validation has detected a potentially dangerous client input value, and processing of the request has been aborted

De googlear, se dice que sólo tiene que añadir un validateRequest en la directiva de página en la parte superior que lo hice, pero todavía me sale este error. Como se puede ver, a continuación es mi código en la vista:

<%@ Page validateRequest="false" Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %> 

Respuesta

5

Utilice el decorador [ValidateInput(false)].

A continuación, deberá escribir un método HTMLEncode para que sea seguro.

Avísame si quieres que publique el que yo uso.

Añadido Encode utilizo

public static class StringHelpers 
{ 
    public static string HtmlEncode(this string value) 
    { 
     if (!string.IsNullOrEmpty(value)) 
     { 
      value = value.Replace("<", "&lt;"); 
      value = value.Replace(">", "&gt;"); 
      value = value.Replace("'", "&apos;"); 
      value = value.Replace(@"""", "&quot;"); 
     } 
     return value; 
    } 

    public static string HtmlDecode(this string value) 
    { 
     if (!string.IsNullOrEmpty(value)) 
     { 
      value = value.Replace("&lt;", "<"); 
      value = value.Replace("&gt;", ">"); 
      value = value.Replace("&apos;", "'"); 
      value = value.Replace("&quot;", @""""); 
     } 

     return value; 
    } 
} 
+0

si se puede publicar, que sería grande – leora

+0

gracias .. t El sombrero funcionó muy bien. ¿Hay alguna manera de preparar previamente el área de texto de una página html existente? – leora

+0

No entiendo exactamente lo que quiere decir [me]. ¿Estás hablando de raspado de pantalla aquí o ... – griegs

5

intente utilizar el atributo [AllowHtml] en su modelo.

class MyModel{ 
[AllowHtml] 
public string Content{get;set;} 
} 
0

un fastidio que en la versión 4 de tinymce que parecen haber eliminado la codificación: la opción XML.

Terminé usando una función de codificación HTML Javascript a partir this answer, y en mi botón de enviar puedo codificar el contenido del área de texto antes de que el formulario envía, mediante el uso de getContent y setContent métodos de TinyMCE

+1

Creo que es riesgoso depender únicamente de la codificación del lado del cliente, ya que no impide que un malvado envíe su POSTING directamente a su sitio. También debe desinfectar las entradas en el servidor. –

+0

Sí, es importante recordar siempre eso –

0

que tenía el mismo problema. No quería desactivar función de validación de ASP.NET MVC, así que seguí buscando hasta que llegué a esta solución:

En el código del plugin TinyMCE codificar el contenido (estoy usando la versión anterior)

tinyMCE.init({ 
    ... 
    encoding: "xml" 
}); 

Y después de esto no obtuve más el error de validación de la aplicación. Entonces me encontré con otro problema cuando edité mi forma el código vendría con las etiquetas HTML

<strong>My input value</strong> 

en lugar de esta

Mi valor de entrada

Por lo tanto, tuve que decodificar el html para ese campo al conseguir mis valores en el controlador, así:

...  
entity.field = HttpUtility.HtmlDecode(entity.field); 
Cuestiones relacionadas