"İ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.