วิธีบล็อกการเข้าถึงของผู้ใช้ไปยังหน้า Servlet โดยใช้ HTTP_REFERER ใน Apache

เมื่อแอปพลิเคชันเว็บเติบโตขึ้น ความต้องการในการรักษาความปลอดภัยหน้าเว็บที่มีข้อมูลสำคัญและป้องกันการเข้าถึงที่ไม่ได้รับอนุญาต โดยเฉพาะจากบอทอัตโนมัติ ก็เพิ่มมากขึ้น หากคุณพบว่าตนเองอยู่ในสถานการณ์ที่ต้องการบล็อกผู้ใช้ไม่ให้เข้าถึงหน้า servlet บางหน้าโดยตรง แต่คุณไม่มีความสามารถในการแก้ไขเซิร์ฟเวอร์แอปพลิเคชัน การใช้ header HTTP_REFERER ของ Apache อาจเป็นส่วนหนึ่งของทางออกของคุณ

ในโพสต์นี้ เราจะสำรวจวิธีการบล็อกการเข้าถึงอย่างมีประสิทธิภาพโดยใช้ HTTP_REFERER ในไฟล์ .htaccess ของคุณ โดยจะแบ่งขั้นตอนออกเป็นชัดเจนและให้ตัวอย่างที่ชัดเจนเพื่อช่วยให้คุณบรรลุเป้าหมาย

การเข้าใจ HTTP_REFERER

HTTP_REFERER เป็น HTTP header ที่ระบุที่อยู่ของหน้าเว็บที่เชื่อมโยงไปยังแหล่งข้อมูลที่ถูกขอ กล่าวง่ายๆ มันบอกเซิร์ฟเวอร์ของคุณว่าผู้ใช้มาจากที่ไหนก่อนที่จะเข้าถึงหน้าเฉพาะ

ทำไมต้องใช้ HTTP_REFERER ในการบล็อกการเข้าถึง?

  1. มาตรการด้านความปลอดภัย: แม้ว่าจะไม่แน่นอน แต่สามารถทำหน้าที่เป็นอุปสรรคเริ่มต้นในการเข้าถึงที่ไม่ได้รับอนุญาต
  2. ความง่ายในการใช้งาน: หากคุณควบคุมเซิร์ฟเวอร์เว็บ แต่ไม่สามารถควบคุมตรรกะของแอปพลิเคชัน นี่เป็นวิธีที่มีประสิทธิภาพ
  3. การป้องกันคำขอที่อัตโนมัติ: การบล็อกคำขอโดยตรงจากแหล่งข้อมูลภายนอกหรือบอทเป็นสิ่งสำคัญหากคุณต้องการให้ฟอร์มของคุณมีความปลอดภัยและใช้งานได้เฉพาะผ่านวิธีที่ถูกต้องเท่านั้น

การตั้งกฏ 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 อาจจะไม่สามารถให้ความปลอดภัยที่สมบูรณ์แบบได้ แต่เป็นมาตรการเบื้องต้นที่มีประสิทธิภาพในการจำกัดการเข้าถึงหน้าเว็บที่สำคัญ วิธีนี้ทำงานได้ดีโดยเฉพาะเมื่อข้อจำกัดในระดับแอปพลิเคชันไม่อนุญาตให้มีการเปลี่ยนแปลงที่ครอบคลุม

เพื่อเตือนความจำ วิธีการนี้จะเพิ่มชั้นความปลอดภัย แต่ไม่ได้เป็นทางออกที่สมบูรณ์ ควรพิจารณาช่วยเสริมการตรวจสอบด้านเซิร์ฟเวอร์และสำรวจมาตรการด้านความปลอดภัยเพิ่มเติมเมื่อแอปพลิเคชันและฐานผู้ใช้ของคุณเติบโตขึ้น

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