ป้องการการ Hotlink ใน Apache ด้วย mod_rewrite เขียนเมื่อ 2009.06.30 โดย

ปัญหาการขโมยแบนด์วิดธ์จากเว็บไซท์อื่น โดยการทำการ hot-link มารูปในเว็บไซท์ที่เราทำนั้น เป็นการเพิ่มภาระและใช้ทรัพยากรของเรา โดยที่เราเป็นผู้เสียผลประโยชน์ การแก้ปัญหานี้ในระบบ *nix ที่ใช้งาน apache สามารถทำได้โดย

ความต้องการเพื่อใช้งาน
  • apache ที่ติดตั้ง mod_rewrite
  • apache อนุญาตใช้งาน AllowOverride
  • apache อนุญาตใช้งาน FollowSymLinks
การทำงานสามารถทำได้โดย การสร้างไฟล์ .htaccess โดยการเขียนคำสั่งดังนี้

HTACCESS
  1. RewriteEngine on
  2. RewriteCond %{HTTP_REFERER} !^$
  3. RewriteCond %{HTTP_REFERER} !^(http://|https://)(www.)?(modoeye.com).*$ [NC]
  4. RewriteRule \.(jpe?g|gif|bmp|png)$ - [F]

จากโค๊ดข้างต้นสามารถอธิบายได้ดังนี้

HTACCESS
  1. RewriteEngine on

เป็นการสั่งให้ module mod_rewrite เริ่มทำงาน

HTACCESS
  1. RewriteCond %{HTTP_REFERER} !^$

เป็นการตรวจสอบค่าใน HTTP_REFERER ว่ามีค่าว่าง

HTACCESS
  1. RewriteCond %{HTTP_REFERER} !^(http://|https://)(www.)?(modoeye.com).*$ [NC]

เป็นการตรวจสอบค่าใน HTTP_REFERER ว่ามีค่าไม่ตรงกับ http://www.modoeye.com, https://www.modoeye.com, http://modoeye.com, https://modoeye.com โดย NC เป็นการระบุว่าตรวจสอบแบบไม่สนใจตัวพิมพ์ใหญ่หรือพิมพ์เล็ก (non case-sensitive:case-insensitive)

HTACCESS
  1. RewriteRule \.(jpe?g|gif|bmp|png)$ - [F]

เป็นการบอกว่าถ้ามีการเรียกมายังไฟล์ที่มี extension เป็น jpg, jpeg, gif, bmp และ png ให้ไม่มีการส่งข้อมูลใดๆไป ส่วน F เป็นการส่งเพียง header รหัส 403 (Forbidden) ไปยัง browser

หากเราต้องการเตือนให้ปลายทางรูปว่าเรารู้นะว่าคุณขโมยรูปของเรา เราสามารถส่งรูปที่เราต้องการไปยังปลายทางได้โดยการระบุรูปที่ต้องการ โดยจะได้โค๊ดทั้งหมดดังนี้

HTACCESS
  1. RewriteEngine on
  2. RewriteCond %{HTTP_REFERER} !^$
  3. RewriteCond %{HTTP_REFERER} !^(http://|https://)(www.)?(modoeye.com).*$ [NC]
  4. RewriteRule \.(jpe?g|gif|bmp|png|wav)$ images/steal.jpg [L]

ส่วนที่เปลี่ยนแปลงคือ

HTACCESS
  1. RewriteRule \.(jpe?g|gif|bmp|png|wav)$ images/steal.jpg [L]

เป็นการบอกว่ามีการเรียกมายังไฟล์ที่มี extension เป็น jpg, jpeg, gif, bmp และ png ให้ทำการส่งภาพ images/steal.jpg ไปแทน โดย L เป็นการบอกว่าเป็นกฎข้อสุดท้าย (Last rule)




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