การรับ“ คำขอที่อาจเป็นอันตรายตรวจพบค่าเส้นทางจากไคลเอนต์ (&)”


114

ฉันมีปัญหาเกี่ยวกับรหัสเดิมที่ต้องการให้ฉันสนับสนุน URL แบบสุ่มราวกับว่าเป็นคำขอสำหรับโฮมเพจ บางส่วนของ URL ที่มีตัวละครในพวกเขาที่สร้างข้อผิดพลาด"อาจเป็นค่า Request.Path อันตรายที่ตรวจพบจากลูกค้า (&)" ไซต์นี้เขียนด้วย ASP.Net MVC 3 (ใน C #) และทำงานบน IIS 7.5

นี่คือตัวอย่าง URL ...

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

นี่คือวิธีที่ฉันตั้งค่าเส้นทางรับทั้งหมด (ฉันมีเส้นทางอื่นที่จะจับหน้าเฉพาะ) ...

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

ฉันได้เพิ่มสิ่งต่อไปนี้ในไฟล์ web.config ของฉัน ...

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

ฉันยังเพิ่มแอตทริบิวต์ ValidateInput ให้กับการกระทำที่ควรจับ URL ...

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

แต่ฉันยังคงได้รับข้อผิดพลาด ความคิดใด ๆ ทำไม? ฉันพลาดอะไรไปหรือเปล่า? ตอนนี้ฉันเพิ่งใช้งานบนเซิร์ฟเวอร์ dev ในพื้นที่ของฉัน (ฉันยังไม่ได้ลองแก้ไขเหล่านี้ในการผลิต)


1
มีการตั้งค่าเพื่ออนุญาตตัวอักษรบางตัวที่ฉันจะตรวจสอบในไม่ช้าเมื่อกลับมาที่คอมพิวเตอร์ ...... แต่คุณสามารถ urlencode ของคุณได้หรือไม่?
Adam Tuliper - MSFT

อาจซ้ำกันของ
คำขอที่

ฉันไม่รู้ว่าด้วยเหตุผลใดที่เว็บไซต์พยายามเปลี่ยนเส้นทางภายในซึ่งเป็นการสร้าง URL เช่น ' localhost /: // localhost / myWebsiteName ' ซึ่งทำให้ฉันมีข้อผิดพลาดเดียวกัน ฉันไม่รู้ว่าเหตุใดไปป์ไลน์ ASP.net จึงถือว่าเป็น URL คำขอที่อันตราย
RBT

ในกรณีของฉันฉันไม่มีเครื่องหมายทับใน URL สิ่งแรกที่ต้องทำคือตรวจสอบการพิมพ์ผิดใน URL
Kishan Vaishnav

คำตอบ:


162

ในขณะที่คุณสามารถลองการตั้งค่าเหล่านี้ในไฟล์ config

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

ฉันจะหลีกเลี่ยงการใช้อักขระเช่น "&" ในเส้นทาง URL แทนที่ด้วยเครื่องหมายขีดล่าง


13
ดูเหมือนว่า requestPathInvalidCharacters = "" ทำเคล็ดลับ ขอบคุณ ฉันยอมรับอย่างแน่นอนว่าคุณไม่ควรใช้ & ในเส้นทางโชคไม่ดีที่เราปล่อยให้เป็นเวลาหลายปีดังนั้นเราจึงจำเป็นต้องสนับสนุนต่อไป
Brian

5
นั่นไม่ใช่ปัญหาด้านความปลอดภัย?
Marius Stănescu

3
@MariusStanescu - มันไม่ใช่ปัญหาด้านความปลอดภัยโดยเนื้อแท้ ขึ้นอยู่กับสิ่งที่คุณทำกับมัน หากอินพุตถูกนำไปและหลบหนีและรวมอยู่กับเอาต์พุตจะไม่เป็นไร ถ้ามันไม่หนีคุณอาจเปิดใจรับการโจมตี
Justin Helgerson

2
โซลูชันนี้สามารถให้ข้อผิดพลาดนี้แก่คุณ: ข้อผิดพลาด HTTP 500.19 - ข้อผิดพลาดภายในเซิร์ฟเวอร์ไม่สามารถเข้าถึงเพจที่ร้องขอได้เนื่องจากข้อมูลการกำหนดค่าที่เกี่ยวข้องสำหรับเพจไม่ถูกต้อง
Tom Stickel

2
ฉันยังได้รับข้อผิดพลาด 500 เมื่อใช้คำตอบนี้ เนื่องจากมีแท็ก <httpRuntime> และ <pages> อยู่แล้วดังนั้นจึงมีข้อขัดแย้งในการทำซ้ำ หลังจากแก้ไขแล้วคำตอบนี้ก็ใช้ได้ดีสำหรับฉันเช่นกัน
Kallum Tanton

5

ฉันพบข้อผิดพลาดประเภทนี้ เพื่อเรียกใช้ฟังก์ชันจากมีดโกน

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

แก้ปัญหาโดยการเปลี่ยนบรรทัด

จาก

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

ถึง

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

route.config ของฉันอยู่ที่ไหน

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 สำหรับ textbox เพียงไม่กี่รายการใน mvc

คุณสามารถทำสิ่งหนึ่ง

ในตัวควบคุม

 [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 พูดอย่างชัดเจนถึง URL ที่เขาต้องการเพื่อรองรับ (ไม่ใช่เนื้อหากล่องข้อความ) และยังไม่มีการกล่าวถึง HTML ดังนั้นคำตอบของคุณจึงใช้ไม่ได้กับคำถามที่ระบุ
Oliver

2
มันใช้ไม่ได้กับคำถาม แต่ฉันโหวตให้เพราะเป็นสิ่งที่ฉันไม่รู้ว่าเป็นตัวเลือก ขอบคุณ @Pavan
MickJuice

0

เราได้รับข้อผิดพลาดเดียวกันนี้ใน Fiddler เมื่อพยายามหาสาเหตุที่โปรแกรมดูแผนที่ Silverlight ArcGIS ของเราไม่โหลดแผนที่ ในกรณีของเราเป็นการพิมพ์ URL ในโค้ดผิด มีเครื่องหมายเท่ากับอยู่ในนั้นด้วยเหตุผลบางประการ
http: = // someurltosome / awesome / place
แทน
http: // someurltosome / awesome / place

หลังจากเอาเครื่องหมายเท่ากับนั้นออกมามันใช้งานได้ดี (แน่นอน)


0

ตรวจสอบบรรทัดด้านล่างที่มีอยู่ในไฟล์ web.config ของคุณ

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.