Score:1

Nginx จับคู่คำใดก็ได้ในคำสั่ง if ยกเว้นหนึ่งคำ

ธง cn

ฉันใช้คำสั่ง if regex in ต่อไปนี้ จิงซ์ config เพื่อจับคู่และบล็อกคำขอที่ไม่ถูกต้องภายในคำขอ uri ข้อความค้นหาที่ไม่ถูกต้องเหล่านี้ขอเพียงอาร์กิวเมนต์เดียวเสมอ แต่ทุกครั้งที่มีชื่อแบบสุ่ม (และจำนวนตัวอักษรและตัวอักษร) พวกเขามักจะกดไปที่หน้าแรกเสมอ

ตัวอย่างข้อความค้นหาที่ไม่ถูกต้อง: /?some1bad0query2=nminkvywbjfdysnvhp

ถ้า ($request_uri ~ "[\w]{5,25}\=[\w]{5,25}$") {
  กลับ 403;
}

ฉันจะแก้ไข regex นี้เพื่อแยกการจับคู่ชื่ออาร์กิวเมนต์บางอย่างได้อย่างไร กุญแจ หรือ สอบถาม (เช่น /?query=somestring) ?

ฉันพยายามใช้วงเล็บเหลี่ยมและ ?(!แบบสอบถาม) แต่ไม่มีโชค

โปรดช่วยฉันแก้ไขคำสั่ง regex นี้ ขอบคุณล่วงหน้า.

Richard Smith avatar
jp flag
นั่นเป็นเพียงตัวอย่างที่ไม่ดี เพราะ `query=somestring` ไม่ตรงกับนิพจน์ทั่วไปของคุณ เนื่องจาก `query` มีความยาวน้อยกว่า 6 อักขระ
cn flag
ใช่ มันผิดอย่างแน่นอน แก้ไข regex ให้เริ่มต้นด้วยชื่ออาร์กิวเมนต์ความยาว 5 ชื่อ (แบบสอบถาม) แต่ฉันยังต้องการตัวอย่างของวิธีที่ฉันสามารถลดการโจมตีนี้และข้ามรายการที่อนุญาตพิเศษของอาร์กิวเมนต์ที่ดี (เช่น ข้อความค้นหา การค้นหา ฯลฯ)
Score:0
ธง jp

มีสองวิธีในการทำเช่นนี้ ใช้ การยืนยันการมองไปข้างหน้าเชิงลบ หรือใช้ก แผนที่.

ตัวอย่างเช่น:

ถ้า ($request_uri ~ "(?!query)\w{5,25}=\w{5,25}$") { ส่งคืน 403; }

ข้อดีของ แผนที่ คือนิพจน์ทั่วไปจะได้รับการประเมินตามลำดับจนกว่าจะพบการจับคู่ ดังนั้นจึงสามารถหลีกเลี่ยงนิพจน์ lookahead ที่ซับซ้อนได้

ตัวอย่างเช่น:

แผนที่ $request_uri $reject {
    ~*^/\?query= 0;
    "~*^/\?\w{5,25}=\w{5,25}$" 1;
}
เซิร์ฟเวอร์ {
    ...
    ถ้า ($ ปฏิเสธ) { ส่งคืน 403; }
    ...
}

เดอะ แผนที่ ปิดกั้นชีวิตภายนอกของ เซิร์ฟเวอร์ บล็อก. หากกฎมีผลเฉพาะกับ URI ที่ขึ้นต้นด้วย /?คุณควรเพิ่มสิ่งนั้นในนิพจน์ทั่วไป (ตามที่แสดงในตัวอย่างที่สองของฉัน)

cn flag
ขอบคุณ ริชาร์ด! แผนที่ดูเหมือนจะเป็นทางออกที่หรูหรากว่าสำหรับฉัน ทดสอบแล้วใช้งานได้ไม่มีที่ติ เปล่า ข้อผิดพลาดของฉันใน if คำสั่งคือฉันใส่ ?! บล็อกหลังจากการโต้เถียง

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา