İstemciden potansiyel olarak tehlikeli bir Request.Path değeri tespit edildi (*)


218

Kendini açıklayan bir hata alıyorum:

İstemciden potansiyel olarak tehlikeli bir Request.Path değeri saptandı (*).

Sorunun nedeni *istek URL'sinde:

https://stackoverflow.com/Search/test*/0/1/10/1

Bu URL, 'test *' ifadesinin arama terimi olduğu ve URL'nin geri kalanının diğer çeşitli filtrelerle ilgili olduğu bir arama sayfasını doldurmak için kullanılır.

URL'de bu özel karakterlere izin vermenin kolay bir yolu var mı? Ben web.config, boşuna değiştirmek için denedim .

Özel karakterleri manuel olarak kodlamalı / deşifre etmeli miyim? Veya bunu yapmak için en iyi uygulama var, ben sorgu dizeleri kullanmaktan kaçınmak istiyorum. - ama bir seçenek olabilir.

Uygulamanın kendisi, c# asp.netyukarıdaki güzel URL'yi üretmek için yönlendirmeyi kullanan bir webformları uygulamasıdır.


1
Sayfanız ValidateRequest=falseen üstte mi?
Neil Knight

Hangi nedenle web sitesi dahili olarak bana aynı hatayı veren ' localhost /: // localhost / myWebsiteName ' gibi bir URL oluşturuyordu bir yönlendirme çalışıyordu bilmiyorum . ASP.net boru hattı neden tehlikeli bir istek URL'si olarak kabul bilmiyorum.
RBT

Yanıtlar:


97

*Karakter URL yolunda izin verilir, ancak sorgu dizesindeki kullanmaktan sorun yoktur değildir:

http://localhost:3286/Search/?q=test*

Bu bir kodlama sorunu değildir, *karakterin bir URL'de özel bir anlamı yoktur, bu nedenle URL'yi kodlayıp kodlamamanız önemli değildir. Farklı bir şema kullanarak kodlamanız ve ardından kodunu çözmeniz gerekir.

Örneğin, kaçış karakteri olarak rastgele bir karakter kullanma:

query = query.Replace("x", "xxx").Replace("y", "xxy").Replace("*", "xyy");

Ve kod çözme:

query = query.Replace("xyy", "*").Replace("xxy", "y").Replace("xxx", "x");

15
"Xxx" "xxy" "xyy" oyunu oldukça zekidir. Okuyucuları karıştırmamak için bunun arkasındaki mantık üzerinde durmak isteyebilirsiniz.
SimpleVar

2
İstek, onu PATHsorgu dizesinde değil, kullanmaktı .
Hugo Delsing

Parametrelerimden birinin URL olduğu aynı senaryoya girdim. Düzgün URL kodlandığında bile, bu hatayı alırdım. Sonunda sadece base64 ne olduğunu anlamaya çalışmaktan çok daha kolay olan parametreyi kodladı (ve benim API'mde kod çözme). Muhtemelen daha iyi bir seçim kendi rutin yerine de rutin yerine.
SpokaneDJ

1
Daha basit bir kodlama şeması olarak aa<=> ave ab<=> kullanamaz *mısınız?
Jared Like Words

Şimdilik bu beni kurtardı, Teşekkürler, Ama uygun zamanda bu tavsiyeyi kontrol etmek istiyorum: stackoverflow.com/a/603962/1830909 ve düşüncelerinizi duyursanız glade olacağım.
QMaster

316

.NET 4.0 kullanıyorsanız, bu URL'lere web.config üzerinden izin verebilmeniz gerekir.

<system.web>
    <httpRuntime 
            requestPathInvalidCharacters="&lt;,&gt;,%,&amp;,:,\,?" />
</system.web>

Not, yıldız işaretini (*) yeni kaldırdım, orijinal varsayılan dize:

<httpRuntime 
          requestPathInvalidCharacters="&lt;,&gt;,*,%,&amp;,:,\,?" />

Daha fazla ayrıntı için bu soruya bakın.


5
Tüm uygulama için bunu kapatmak zorunda değilsiniz bu yüzden bir eylem bir mvc özniteliği kullanarak bunu yapmak için herhangi bir yolu? Bu cevaba benzer: stackoverflow.com/a/1540976/298758
longda

4
@longda: Belki de ihtiyacınız olan URL için bir <location path = "my / path"> öğesi ile sarmayı deneyin. Yansımayı kullanmak küresel bir perspektiften oldukça basit olurdu, ancak bunu bir denetleyici / eylem temelinde ayarlamak konusunda emin değilim. Belki bir soru başlat?
Dave Transom

Sadece ASP.net MVC projesinde çalışmıyor, viewStart'ta düzeni belirlemek için çalıştırma işlemi alıyor Şu hatayı aldı: Yoldaki geçersiz karakter.
QMaster

7

Benim için, web api 2.0 ile .net 4.5.2 üzerinde çalışıyorum, aynı hata var, ben sadece requestPathInvalidCharacters = "" ekleyerek ayarlayın requestPathInvalidCharacters izin verilmeyen karakterleri ayarlamak zorunda başka karakterleri kaldırmak zorunda bu soruna neden olur.

<system.web>
     <httpRuntime targetFramework="4.5.2" requestPathInvalidCharacters="" />
     <pages  >
      <namespaces>
     ....
 </namespaces>
    </pages> 
  </system.web>

** İyi bir uygulama olmadığını, bir nesnenin niteliği daha iyi olduğundan veya özel karakteri kodlamaya çalıştığından bu parametreye sahip bir yazı olabileceğini unutmayın. - Rest api tasarlamak için en iyi uygulama üzerinde arama yaptıktan sonra, arama, sıralama ve sayfalandırmada, sorgu parametresini bu şekilde işlememiz gerektiğini buldum

/companies?search=Digital%26Mckinsey

ve bu, herhangi bir şekilde% 26 ile url'ye kodladığımızda ve yeniden yerleştirdiğimizde sorunu çözüyor, sunucuda doğru dijital ve Mckinsey parametresini alıyoruz

bu bağlantı dinlenme web api tasarımı en iyi uygulama yardımcı olabilir https://hackernoon.com/restful-api-designing-guidelines-the-best-practices-60e1d954e7c9


6

Rota değerini kodlamanız ve ardından arama yapmadan önce (gerekirse) değerin kodunu çözmeniz gerekir.


Yanıtınız için teşekkürler. Effectivley'nin * gibi öğeler üzerinde bir değişiklik yapması ve okurken bunları yerine koyması mı demek istediniz?

Değerlerin kodlanması ve kodunun çözülmesine ilişkin bir kod örneği gösterebilir misiniz?
Ciaran Gallagher

1

Benim için, url'yi yazarken, bir kullanıcı yanlışlıkla? sorgu parametrelerini başlatmak için

Örneğin:

url.com/endpoint/parameter=SomeValue&otherparameter=Another+value

olması gereken:

url.com/endpoint?parameter=SomeValue&otherparameter=Another+value


Evet, benim için bile aynı url.com/endpoint¶meter=SomeValue&otherparameter=AnotherValue
Konda

0

Bu istisna başvurumda oluştu ve oldukça yanıltıcıydı.

Ben bir JSON dizi nesnesi geçen, bir ajax yöntemi çağrısı kullanarak bir .aspx sayfa Web Yöntemi çağrıldığında atıldı. Web Sayfası yöntemi imzasında, güçlü yazılan bir .NET nesnesi olan OrderDetails dizisi vardı. Actual_Qty özelliği int olarak tanımlandı ve JSON nesnesi Actual_Qty özelliği "4" (fazladan boşluk karakteri) içeriyordu. Fazladan alan kaldırıldıktan sonra dönüşüm mümkün oldu, Web Sayfası yöntemine ajax çağrısı ile başarıyla ulaşıldı.


0

IIS Express ise web projesinin sunucu uygunluğunu Yerel IIS olarak ayarlamaya çalışın. Proje URL'sinin doğru olduğundan emin olun ve virual dizin oluşturun.


0

Tekdüzen Kaynak Konum Belirleyicisi (URL) ile uğraşırken belirli sözdizimi standartları vardır , bu özel durumda Ayrılmış Karakterlerle ilgileniyoruz .

RFC 3986'ya kadar olduğu gibi , Ayrılmış Karakterler genel sözdizimi, her bir şemaya özel sözdizimi veya bir URI'nin kayıt silme algoritmasının uygulamaya özgü sözdizimi tarafından sınırlayıcı olarak tanımlanabilir (veya tanımlanmayabilir); Ve yıldız işareti (*) Ayrılmış Bir Karakterdir.

En iyi uygulama URL'lerde Korunmayan Karakterler kullanmaktır veya kodlamayı deneyebilirsiniz.

Kazmaya devam et :


1
Bu hata, URL'deki ayrılmış karakter yüzde %25yerine kodlanmışsa, örneğin %IIS yerine bu hatayı mükemmel şekilde geçerli bir URL için döndürebilir.
Florian Kış
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.