2010-09-27 10 views
5

Ho un sito ASP.NET 4 su cui voglio consentire alle persone di inserire "<" nella loro password. Tuttavia, .NET si intromette bloccando (quello che vede come) un tentativo di inserire HTML in un campo modulo. So che posso disattivare completamente la convalida dell'input, ma voglio solo disattivarlo per questo campo. Qualcuno sa un modo semplice per farlo?Disabilita la convalida dell'input per un singolo campo

+0

C'è un motivo particolare che è necessario

+9

@ eddy556 - ha bisogno di un motivo speciale? – Oded

+0

@Oded - Certo che lo fa, posso capire i vantaggi di avere un personaggio in più, ma se questo è vero perché vuole solo permettere viene in mente. –

risposta

0

È possibile disattivare solo la convalida dell'input per l'intera pagina. L'unica soluzione che posso pensare è di disattivare la convalida dell'input e quindi scrub tutti gli altri campi di input (non password) usando qualcosa come Anti-XSS.

+0

Grazie per aver segnalato un collegamento senza citare l'esempio. Dead link now –

+1

Non è un esempio, era un collegamento a una libreria che fornisce funzionalità anti-xss. Ora su https://www.nuget.org/packages/AntiXSS/4.3.0. –

+0

Ok scusa, ma ora non posso annullare il mio down-vote. Potresti modificare il tuo post con il nuovo link in modo che io possa farlo? –

0

È possibile disattivare la convalida dell'input per la singola azione MVC utilizzando ValidateInputAttribute. Dal momento che accetti solo nome utente/password (presumo) dovresti essere in grado di scriverti l'inserimento di eventuali caratteri non validi. Utilizzare lo Microsoft Web Protection Library per farlo.

+0

Questo è Webforms, non MVC e I avere molti input su questa pagina Altrimenti funzionerebbe benissimo :) – eliah

+1

Mah bad. Esiste una proprietà ValidateRequest nella direttiva @Page che è possibile utilizzare per disattivare la convalida solo per quella particolare pagina, ma ritengo che sia il più dettagliato possibile. –

0

Nota in ASP.NET 4 e versioni successive per ottenere ValidateRequest nella direttiva @Page per funzionare è necessario aggiungere <httpRuntime requestValidationMode="2.0" /> a web.config. Vedi questa pagina per i dettagli: http://www.asp.net/whitepapers/aspnet4/breaking-changes

Ma questo è il mio approccio preferito:

namespace Controls 
{ 
    public class HtmlTextBox : TextBox 
    { 
     protected override bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection) 
     { 
      bool res = base.LoadPostData(postDataKey, postCollection); 
      Text = Text.Replace("&lt;", "<").Replace("&gt;", ">").Replace("&amp;", "&"); 
      return res; 
     } 

     protected override void OnPreRender(EventArgs e) 
     { 
      base.OnPreRender(e); 

      ScriptManager.RegisterOnSubmitStatement(this, this.GetType(), "htmlTextBox" + UniqueID, "try { var item = document.getElementsByName('" + UniqueID + "')[0]; item.value = item.value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;'); } catch (err) {}"); 
     } 
    } 
} 

E poi registrare il controllo in web.config:

<system.web> 
    <pages> 
    <controls> 
     <add tagPrefix="uc1" namespace="Controls" /> 
    </controls> 
    </pages> 
</system.web> 

In questo modo si può semplicemente utilizzare <uc1:HtmlTextBox runat="server" /> se si desidera consentire alla casella di testo di pubblicare html, ma gli altri controlli della pagina saranno comunque bloccati dalla pubblicazione di html a differenza dell'approccio di disattivazione di ValidateRequest.

1

Questo è ora possibile con .NET 4.5.

Aggiornare il web.config:

<httpRuntime targetFramework="4.5" requestValidationMode="4.5" /> 

Quindi impostare ValidateRequestMode="Disabled" sui vostri controlli delle password:

<asp:YourControl id="YourControl" runat="server" ValidateRequestMode="Disabled"/> 

Nota - dopo l'aggiornamento web.config, si potrebbe incorrere nell'errore WebForms UnobtrusiveValidationMode requires a ScriptResourceMapping for 'jquery'. Vedere ASP.Net 2012 Unobtrusive Validation with jQuery per maggiori informazioni su questo.

Maggiori informazioni RequestValidationMode 4.5: requestValidationMode 4.5 vs 2.0

Problemi correlati