2010-09-27 15 views
5

Kullanıcıların '<' parolasını kullanmasına izin vermek istediğim bir ASP.NET 4 sitem var. Ancak, .NET bir form alanına HTML koyma girişimini engelliyor (ne görüyorsa). Giriş onaylamayı tamamen kapatabileceğimi biliyorum, ancak sadece bu alan için kapatmak istiyorum. Bunu yapmanın kolay bir yolu var mı?Tek bir alan için giriş doğrulamayı kapatın

+0

bir şifre olması

+9

@ eddy556 - özel bir nedene ihtiyacı var mı? – Oded

+0

@Oded - Tabii ki, ekstra bir karaktere sahip olmanın avantajlarını anlayabiliyorum, ancak eğer doğruysa, neden sadece akla geliyor. –

cevap

0

Sadece sayfanın tamamı için giriş doğrulamasını kapatabilirsiniz. Düşünebildiğim tek çözüm, giriş doğrulamasını kapatmak ve diğer tüm (şifre olmayan) giriş alanlarını Anti-XSS gibi bir şey kullanarak fırçalamaktır.

+0

Örneği alıntılamadan bir bağlantıya işaret ettiğiniz için teşekkür ederiz. Ölü bağlantı şimdi –

+1

Bu bir örnek değil, anti-xss işlevselliği sağlayan bir kütüphaneye bir bağlantıydı. Şimdi https://www.nuget.org/packages/AntiXSS/4.3.0 adresinde. –

+0

Üzgünüm, ama şimdi aşağı oyumu geri alamıyorum. Gönderinizi yeni bağlantıyla düzenleyebilir misiniz? Böylece bunu yapabilirim? –

0

ValidateInputAttribute'u kullanarak tek MVC eylemi için giriş doğrulamayı kapatabilirsiniz. Sadece kullanıcı adını/şifreyi kabul ettiğinden (varsayalım), herhangi bir geçersiz karakterin girişini kendiniz temizleyebilmelisiniz. Bunu yapmak için Microsoft Web Protection Library kullanın.

+0

Bu Webforms, MVC değil ve ben Bu sayfada çok fazla giriş var. Aksi takdirde bu harika çalışacaktır :) – eliah

+1

Mah kötü. Sadece belirli bir sayfa için doğrulamayı kapatmak için kullanabileceğiniz @Page yönergesinde bir ValidateRequest özelliği vardır, ancak bence bu alabileceğiniz kadar ayrıntılıdır. –

0

ASP.NET 4'teki ve daha yüksek değerlerde @Page yönergesinde ValidateRequest'i almak için web.config dosyasına <httpRuntime requestValidationMode="2.0" /> eklemeniz gerekir. Ayrıntılar için bu sayfaya bakın: http://www.asp.net/whitepapers/aspnet4/breaking-changes

Ama bu benim tercih yaklaşımdır:

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) {}"); 
     } 
    } 
} 

Sonra web.config'de denetimi kaydetmek:

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

sadece <uc1:HtmlTextBox runat="server" /> kullanabilirsiniz Bu şekilde metin kutusunun html göndermesine izin vermek istiyorsanız, ancak sayfadaki diğer denetimler hala ValidateRequest'i kapatma yaklaşımının tersine html göndermekten engellenir.

1

görüyoruz.

Güncelleme Web.config:

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

Sonra şifrenizi denetimlere ValidateRequestMode="Disabled" ayarlayın:

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

Not - web.config güncelledikten sonra, sizin için ASP.Net 2012 Unobtrusive Validation with jQuery Bkz hata WebForms UnobtrusiveValidationMode requires a ScriptResourceMapping for 'jquery'. içine çalışabilir Bunun hakkında daha fazla bilgi. RequestValidationMode 4.5 üzerinde

diğer bilgiler: requestValidationMode 4.5 vs 2.0

İlgili konular