Mendapatkan "Nilai Request.Path yang berpotensi berbahaya terdeteksi dari klien (&)"

114

Saya punya masalah kode warisan yang mengharuskan saya mendukung url acak seolah-olah itu adalah permintaan untuk beranda. Beberapa URL memiliki karakter di dalamnya yang menghasilkan kesalahan "Nilai Request.Path yang berpotensi berbahaya terdeteksi dari klien (&)" . Situs ini ditulis dengan ASP.Net MVC 3 (dalam C #) dan berjalan di IIS 7.5.

Berikut contoh URL ...

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

Inilah cara saya memiliki pengaturan rute penampung semua (saya memiliki rute lain untuk menangkap halaman tertentu) ...

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

Saya telah menambahkan hal-hal berikut ke file web.config saya ...

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

Saya juga telah menambahkan atribut ValidateInput ke tindakan yang seharusnya menangkap url ...

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

Tapi saya masih mendapatkan kesalahannya. Ada ide mengapa? Apakah saya melewatkan sesuatu? Saat ini saya hanya menjalankan server dev lokal saya (saya belum mencoba perbaikan ini dalam produksi).

Brian
sumber
1
Ada pengaturan untuk mengizinkan karakter tertentu saya akan memeriksa segera ketika kembali di komputer ...... tetapi dapatkah Anda urlencode URL Anda?
Adam Tuliper - MSFT
Saya tidak tahu untuk alasan apa situs web itu secara internal mencoba pengalihan yang membuat URL seperti ' localhost /: // localhost / myWebsiteName ' yang memberi saya kesalahan yang sama. Saya tidak tahu mengapa pipeline ASP.net menganggapnya sebagai URL permintaan yang berbahaya.
RBT
Dalam kasus saya, saya kehilangan garis miring di URL. Hal pertama yang harus dilakukan adalah memeriksa kesalahan ketik pada URL.
Kishan Vaishnav

Jawaban:

162

Meskipun Anda dapat mencoba pengaturan ini di file konfigurasi

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

Saya akan menghindari penggunaan karakter seperti '&' di jalur URL menggantinya dengan garis bawah.

Alexander Prokofyev
sumber
13
Tampaknya requestPathInvalidCharacters = "" berhasil. Terima kasih. Saya sangat setuju bahwa Anda tidak boleh menggunakan & di jalur, sayangnya kami telah mengizinkannya selama bertahun-tahun sehingga kami harus terus mendukungnya.
Brian
5
Bukankah itu masalah keamanan?
Marius Stănescu
3
@MariusStanescu - Ini secara inheren bukan masalah keamanan; itu tergantung pada apa yang Anda lakukan dengannya. Jika input diambil dan di-escape serta disertakan dengan output, itu akan baik-baik saja. Jika tidak lolos, maka Anda mungkin membuka diri untuk serangan.
Justin Helgerson
2
Solusi ini dapat memberi Anda kesalahan ini: Kesalahan HTTP 500.19 - Kesalahan Server Internal Halaman yang diminta tidak dapat diakses karena data konfigurasi terkait untuk halaman tersebut tidak valid.
Tom Stickel
2
Saya juga menerima kesalahan 500 saat menggunakan jawaban ini. Hal ini karena sudah memiliki tag <httpRuntime> dan <pages>, oleh karena itu terjadi konflik duplikasi. Setelah menyelesaikan itu, jawaban ini bekerja dengan baik untuk saya juga.
Kallum Tanton
5

Saya telah menghadapi jenis kesalahan ini. untuk memanggil fungsi dari pisau cukur.

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

selesaikan itu dengan mengubah garis

dari

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

untuk

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

di mana route.config saya berada

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
        );
reza.cse08
sumber
1

Jika Anda ingin mengizinkan tag HTML hanya untuk beberapa kotak teks di mvc

Anda bisa melakukan satu hal

dalam pengontrol

 [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();
}
Pavan
sumber
1
OP secara eksplisit berbicara tentang URL yang perlu dia dukung (bukan konten kotak teks) dan juga tidak ada penyebutan HTML - jadi jawaban Anda benar-benar tidak berlaku untuk pertanyaan yang diberikan.
Oliver
2
Itu tidak berlaku untuk pertanyaan, tetapi saya memberi suara positif karena itu adalah sesuatu yang saya tidak tahu sebagai pilihan. Terima kasih @Pavan
Mickuu
0

Kami mendapatkan kesalahan yang sama di Fiddler saat mencoba mencari tahu mengapa penampil peta ArcGIS Silverlight kami tidak memuat peta. Dalam kasus kami, itu adalah kesalahan ketik pada URL di kode. Ada tanda yang sama di sana karena suatu alasan.
http: = // someurltosome / awesome / place
bukannya
http: // someurltosome / awesome / place

Setelah menghilangkan tanda yang sama itu berhasil dengan baik (tentu saja).

Josh P.
sumber
0

Periksa baris di bawah ini ada di file web.config Anda

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

Balamurugan
sumber