วิธีบล็อกการเข้าถึงของผู้ใช้ไปยังหน้า Servlet โดยใช้ HTTP_REFERER ใน Apache
เมื่อแอปพลิเคชันเว็บเติบโตขึ้น ความต้องการในการรักษาความปลอดภัยหน้าเว็บที่มีข้อมูลสำคัญและป้องกันการเข้าถึงที่ไม่ได้รับอนุญาต โดยเฉพาะจากบอทอัตโนมัติ ก็เพิ่มมากขึ้น หากคุณพบว่าตนเองอยู่ในสถานการณ์ที่ต้องการบล็อกผู้ใช้ไม่ให้เข้าถึงหน้า servlet บางหน้าโดยตรง แต่คุณไม่มีความสามารถในการแก้ไขเซิร์ฟเวอร์แอปพลิเคชัน การใช้ header HTTP_REFERER
ของ Apache อาจเป็นส่วนหนึ่งของทางออกของคุณ
ในโพสต์นี้ เราจะสำรวจวิธีการบล็อกการเข้าถึงอย่างมีประสิทธิภาพโดยใช้ HTTP_REFERER
ในไฟล์ .htaccess
ของคุณ โดยจะแบ่งขั้นตอนออกเป็นชัดเจนและให้ตัวอย่างที่ชัดเจนเพื่อช่วยให้คุณบรรลุเป้าหมาย
การเข้าใจ HTTP_REFERER
HTTP_REFERER
เป็น HTTP header ที่ระบุที่อยู่ของหน้าเว็บที่เชื่อมโยงไปยังแหล่งข้อมูลที่ถูกขอ กล่าวง่ายๆ มันบอกเซิร์ฟเวอร์ของคุณว่าผู้ใช้มาจากที่ไหนก่อนที่จะเข้าถึงหน้าเฉพาะ
ทำไมต้องใช้ HTTP_REFERER ในการบล็อกการเข้าถึง?
- มาตรการด้านความปลอดภัย: แม้ว่าจะไม่แน่นอน แต่สามารถทำหน้าที่เป็นอุปสรรคเริ่มต้นในการเข้าถึงที่ไม่ได้รับอนุญาต
- ความง่ายในการใช้งาน: หากคุณควบคุมเซิร์ฟเวอร์เว็บ แต่ไม่สามารถควบคุมตรรกะของแอปพลิเคชัน นี่เป็นวิธีที่มีประสิทธิภาพ
- การป้องกันคำขอที่อัตโนมัติ: การบล็อกคำขอโดยตรงจากแหล่งข้อมูลภายนอกหรือบอทเป็นสิ่งสำคัญหากคุณต้องการให้ฟอร์มของคุณมีความปลอดภัยและใช้งานได้เฉพาะผ่านวิธีที่ถูกต้องเท่านั้น
การตั้งกฏ Rewrite ใน .htaccess
ในการดำเนินการบล็อกตาม HTTP_REFERER
คุณจะต้องเพิ่มกฏในไฟล์ .htaccess
ของคุณ นี่คือวิธีการจัดโครงสร้างกฎของคุณอย่างมีประสิทธิภาพ
กฎ Rewrite เบื้องต้น
คุณอาจเริ่มด้วยกฎที่ง่ายแบบนี้:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://mywebaddress(.cl)?/.* [NC]
RewriteRule (servlet1|servlet2)/.+ - [F]
คำอธิบาย:
RewriteEngine on
: เปิดใช้งานเครื่องมือเขียนใหม่RewriteCond
ตรวจสอบว่าHTTP_REFERER
ไม่ตรงกับเว็บไซต์ที่กำหนดRewriteRule
มุ่งเป้าไปที่คำขอที่servlet1
หรือservlet2
กฎ Rewrite ที่ปรับปรุงแล้ว
อย่างไรก็ตาม หากคุณต้องการปรับปรุงการตรวจสอบเพื่ออนุญาตเฉพาะคำขอที่ถูกต้องจากเว็บไซต์ของคุณและบล็อกคำขอที่มีสตริงคำค้น คุณต้องการตรรกะที่ซับซ้อนมากขึ้น:
RewriteCond %{HTTP_REFERER} !^http://mywebaddress(.cl)?/.* [NC]
RewriteCond %{QUERY_STRING} ^.+$ [OR]
RewriteCond %{REQUEST_METHOD} ^POST$ [OR]
RewriteCond %{PATH_INFO} ^.+$
RewriteRule (servlet1|servlet2)\b - [F]
การแยกกฎที่ปรับปรุง:
- เงื่อนไขแรก: ตรวจสอบว่าคำขอมาจาก URL ของเว็บไซต์ที่กำหนด
- เงื่อนไขที่สอง: บล็อกคำขอที่มี query string ไม่ว่าง
- เงื่อนไขที่สาม: บล็อกคำขอ POST โดยตรง
- เงื่อนไขที่สี่: บล็อกคำขอที่มี PATH_INFO
การรวมกันของเงื่อนไขเหล่านี้จะช่วยให้มั่นใจได้ว่าคำขอที่ถูกต้องซึ่งนำทางผ่านสิ่งแวดล้อมของเว็บไซต์ของคุณสามารถเข้าถึงหน้า servlet ที่กำหนดได้
สรุป
แม้ว่า การพึ่งพา HTTP_REFERER
อาจจะไม่สามารถให้ความปลอดภัยที่สมบูรณ์แบบได้ แต่เป็นมาตรการเบื้องต้นที่มีประสิทธิภาพในการจำกัดการเข้าถึงหน้าเว็บที่สำคัญ วิธีนี้ทำงานได้ดีโดยเฉพาะเมื่อข้อจำกัดในระดับแอปพลิเคชันไม่อนุญาตให้มีการเปลี่ยนแปลงที่ครอบคลุม
เพื่อเตือนความจำ วิธีการนี้จะเพิ่มชั้นความปลอดภัย แต่ไม่ได้เป็นทางออกที่สมบูรณ์ ควรพิจารณาช่วยเสริมการตรวจสอบด้านเซิร์ฟเวอร์และสำรวจมาตรการด้านความปลอดภัยเพิ่มเติมเมื่อแอปพลิเคชันและฐานผู้ใช้ของคุณเติบโตขึ้น
หากคุณได้ทดลองใช้วิธีเหล่านี้หรือมีข้อคิดเห็นเพิ่มเติม โปรดแสดงความคิดเห็น—ประสบการณ์ของคุณสามารถช่วยผู้อื่นที่เผชิญกับความท้าทายที่คล้ายกัน!