"İstemciden potansiyel olarak tehlikeli bir Request.Path değeri algılandı (&)" alınıyor


114

Rastgele URL'leri ana sayfa için isteklermiş gibi desteklememi gerektiren eski bir kod sorunum var. Bazı URL'lerde "İstemciden potansiyel olarak tehlikeli bir Request.Path değeri algılandı (&)" hatasını oluşturan karakterler var . Site ASP.Net MVC 3 (C # ile) ile yazılmıştır ve IIS 7.5 üzerinde çalışmaktadır.

İşte örnek bir URL ...

http://mywebsite.com/Test123/This_&_That

Tümünü yakalama rota kurulumumu şu şekilde yaptım (belirli sayfaları yakalamak için başka rotalarım var) ...

routes.MapRoute(
    "Default", // Route name
    "{garb1}/{garb2}", // URL with parameters
    new { controller = "Website", action = "Home", garb1 = UrlParameter.Optional, garb2 = UrlParameter.Optional } // Parameter defaults
);

Aşağıdaki şeyleri web.config dosyama ekledim ...

<configuration>
    <system.web>
        <pages validateRequest="false" />
        <httpRuntime requestValidationMode="2.0" />
    </system.web>
<configuration>

Ayrıca, URL'leri yakalaması gereken eyleme ValidateInput özniteliğini ekledim ...

public class WebsiteController : Controller
{
    [ValidateInput(false)]
    public ActionResult Home()
    {
        return View();
    }
}

Ama yine de hatayı alıyorum. Herhangi bir fikriniz neden? Bir şey mi kaçırdım? Şu anda yalnızca yerel geliştirme sunucumda çalışıyorum (bu düzeltmeleri henüz üretimde denemedim).


1
Bilgisayarda kısa bir süre sonra kontrol edeceğim belirli karakterlere izin veren bir ayar var ...... ama URL'nizi urlencode edebilir misiniz?
Adam Tuliper - MSFT


Web sitesinin hangi nedenle dahili olarak aynı hatayı veren ' localhost /: // localhost / myWebsiteName ' gibi bir URL oluşturan bir yeniden yönlendirmeyi denediğini bilmiyorum . ASP.net ardışık düzeninin bunu neden tehlikeli bir istek URL'si olarak gördüğünü bilmiyorum.
RBT

Benim durumumda, URL'de bir eğik çizgi eksikti. Yapılması gereken ilk şey, URL'de bir yazım hatası olup olmadığını kontrol etmek olacaktır.
Kishan Vaishnav

Yanıtlar:


162

Bu ayarları yapılandırma dosyasında deneyebilirsiniz

<system.web>
    <httpRuntime requestPathInvalidCharacters="" requestValidationMode="2.0" />
    <pages validateRequest="false" />
</system.web>

URL yolunda '&' gibi karakterleri alt çizgilerle değiştirmekten kaçınırım.


13
Görünüşe göre requestPathInvalidCharacters = "" hile yaptı. Teşekkürler. Yolda kullanmamanız gerektiği konusunda kesinlikle hemfikirim, maalesef yıllardır buna izin veriyoruz, bu yüzden onu desteklemeye devam etmemiz gerekiyor.
Brian

5
bu bir güvenlik sorunu değil mi?
Marius Stănescu

3
@MariusStanescu - Doğası gereği bir güvenlik sorunu değil; onunla ne yaptığına bağlı. Girdi alınır ve atlanırsa ve çıktıya dahil edilirse sorun olmaz. Kaçmazsa, kendinizi bir saldırıya açabilirsiniz.
Justin Helgerson

2
Bu çözüm size şu hatayı verebilir: HTTP Hatası 500.19 - Dahili Sunucu Hatası Sayfayla ilgili yapılandırma verileri geçersiz olduğundan istenen sayfaya erişilemiyor.
Tom Stickel

2
Bu yanıtı kullanırken 500 hatası da aldım. Bunun nedeni zaten <httpRuntime> ve <pages> etiketlerine sahip olmasından kaynaklanıyordu, bu nedenle bir çoğaltma çakışması vardı. Bunu çözdükten sonra, bu cevap benim için de iyi çalışıyor.
Kallum Tanton

5

Bu tür bir hatayla karşılaştım. usturadan bir fonksiyon çağırmak için.

public ActionResult EditorAjax(int id, int? jobId, string type = ""){}

çizgiyi değiştirerek çöz

itibaren

<a href="/ScreeningQuestion/EditorAjax/5&jobId=2&type=additional" /> 

için

<a href="/ScreeningQuestion/EditorAjax/?id=5&jobId=2&type=additional" />

route.config'im nerede

routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }, new string[] { "RPMS.Controllers" } // Parameter defaults
        );

1

Html etiketlerine yalnızca mvc'de birkaç metin kutusu için izin vermek istiyorsanız

Bir şey yapabilirsin

kontrolörde

 [ValidateInput(false)]
public ActionResult CreateNewHtml()  //view
{
    return View();
}
[ValidateInput(false)]
[HttpPost]
public ActionResult CreateNewHtml(cbs obj)//view cbs is database class
{
    repo.AddHtml(obj);
    return View();
}

1
OP, desteklemesi gereken URL'lerden açıkça bahseder (metin kutusu içeriği değil) ve ayrıca HTML'den de bahsedilmez - bu nedenle cevabınız verilen soru için gerçekten geçerli değildir.
Oliver

2
Soru için geçerli değil, ancak bunun bir seçenek olduğunu bilmediğim bir şey olduğu için oy verdim. Teşekkürler @Pavan
MickJuice

0

Silverlight ArcGIS harita görüntüleyicimizin haritayı neden yüklemediğini anlamaya çalışırken Fiddler'da da aynı hatayı alıyorduk. Bizim durumumuzda, koddaki URL'de bir yazım hatası vardı. Orada bir sebepten dolayı eşitlik işareti vardı.
http: = // someurltosome / awesome / place
yerine
http: // someurltosome / awesome / place

Eşittir işaretini çıkardıktan sonra harika çalıştı (elbette).


0

Web.config dosyanızda aşağıdaki satırların mevcut olup olmadığını kontrol edin

<system.web> <httpRuntime requestPathInvalidCharacters="" /> </system.web>

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.