Hotlinking คือการที่เว็บไซต์อื่นนำ URL รูปภาพหรือไฟล์บนเซิร์ฟเวอร์ของคุณไปฝังในเว็บของตัวเองโดยตรง ทำให้เซิร์ฟเวอร์ของคุณต้องส่ง Bandwidth ออกไปแต่คุณไม่ได้รับ Traffic จริงๆ เลย ปัญหานี้ทำให้ Bandwidth หมดเร็วโดยไม่จำเป็น และบน Shared Hosting อาจทำให้เว็บช้าลงหรือโดนระงับบัญชี
Hotlinking คืออะไร? ทำไมถึงอันตราย?
สมมติว่าคุณมีรูปภาพที่ https://yourdomain.com/img/product.jpg และเว็บอื่นใช้ HTML ว่า <img src="https://yourdomain.com/img/product.jpg"> — ทุกครั้งที่ผู้เยี่ยมชมเว็บนั้นโหลดรูป เซิร์ฟเวอร์ของคุณต้องส่งไฟล์นั้นออกไป คุณเสีย Bandwidth โดยตรง
ผลกระทบที่เกิดขึ้น:
- Bandwidth หมดเร็วกว่าปกติ อาจโดนคิดค่าใช้จ่ายเพิ่ม
- เว็บของคุณช้าลงเมื่อ Server Load เพิ่ม
- บน Shared Hosting อาจโดน Suspend บัญชีหาก Bandwidth เกิน Quota
- ไฟล์ลิขสิทธิ์ถูกนำไปใช้โดยไม่ได้รับอนุญาต
วิธีที่ 1: เปิด Hotlink Protection ผ่าน DirectAdmin
DirectAdmin มีฟีเจอร์ Hotlink Protection ในตัว ตั้งค่าได้ง่ายโดยไม่ต้องแก้ .htaccess เอง:
- Login เข้า DirectAdmin → คลิก Advanced Features
- เลือก Hotlink Protection
- เปิดสวิตช์ Enable Hotlink Protection
- ใส่ Allowed URLs — โดเมนที่อนุญาตให้ hotlink ได้ (เช่น โดเมนของคุณเอง)
- ใส่ Allowed Extension — นามสกุลไฟล์ที่ต้องการป้องกัน เช่น
jpg,jpeg,png,gif,webp,pdf,mp3,mp4 - ระบุ Redirect URL — URL รูปภาพที่จะแสดงแทนเมื่อมีการ hotlink (เช่น รูป "No Hotlinking")
- คลิก Save
DirectAdmin จะสร้าง rule ใน .htaccess ให้อัตโนมัติ
วิธีที่ 2: ตั้งค่าด้วย .htaccess เอง
หากต้องการควบคุมละเอียดกว่า หรือ Hosting ไม่มีหน้า Hotlink Protection GUI ให้เพิ่มโค้ดนี้ใน .htaccess ที่ public_html/:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain\.com/ [NC]
RewriteRule \.(jpg|jpeg|png|gif|webp|svg|pdf|mp3|mp4)$ - [F,NC,L]
โค้ดนี้ทำงานดังนี้:
!^$— อนุญาต Direct Access (ไม่มี Referer) เช่นพิมพ์ URL ตรงๆ ในเบราว์เซอร์!^https?://(www\.)?yourdomain\.com/— อนุญาตเฉพาะ Request ที่มาจากโดเมนของตัวเอง[F]— ตอบ 403 Forbidden แทนการส่งไฟล์
แทนที่ yourdomain.com ด้วยโดเมนจริงของคุณ ทุกครั้งก่อนบันทึก และถ้ามีหลายโดเมนที่อนุญาต ให้เพิ่ม RewriteCond เพิ่มได้
ทำความเข้าใจ Bandwidth: ทำไม Hotlink ถึงแพงกว่าที่คิด
หลายคนมองว่า Hotlink เป็นแค่เรื่องเล็กน้อย แต่ในความเป็นจริง Bandwidth ที่ถูกขโมยอาจส่งผลกระทบหนักมาก โดยเฉพาะบน Shared Hosting ที่มี Quota จำกัด มาดูตัวเลขจริงกัน
ตัวอย่างการคำนวณ Bandwidth ที่หายไป
สมมติว่าคุณมีรูปสินค้าขนาด 200 KB และเว็บอื่นฝัง URL รูปของคุณไว้ในหน้าที่มีผู้เยี่ยมชม 10,000 คน/วัน
| สถานการณ์ | Bandwidth/วัน | Bandwidth/เดือน |
|---|---|---|
| รูป 200 KB × 10,000 visitor/วัน | ~2 GB | ~60 GB |
| รูป 500 KB × 10,000 visitor/วัน | ~5 GB | ~150 GB |
| PDF 5 MB × 1,000 downloads/วัน | ~5 GB | ~150 GB |
แพ็กเกจ Shared Hosting ส่วนใหญ่มี Bandwidth จำกัด 10–30 GB/เดือน เห็นได้ชัดว่า Hotlink เพียงแหล่งเดียวอาจทำให้ Quota หมดก่อนสิ้นเดือน
Hotlink Protection สำหรับเว็บ WordPress โดยเฉพาะ
ถ้าคุณใช้ WordPress มีวิธีเพิ่มเติมในการป้องกัน Hotlink นอกจาก .htaccess ระดับ Apache ได้แก่:
ผ่าน wp-config.php และ WP_CONTENT_URL
เพิ่มโค้ดนี้ในไฟล์ functions.php ของ Theme เพื่อเพิ่ม HTTP Header ป้องกัน Hotlink บนไฟล์ที่เสิร์ฟผ่าน WordPress:
// ป้องกัน Hotlink ผ่าน WordPress Headers
function block_hotlinks() {
$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
$allowed = 'yourdomain.com';
if ($referer && strpos($referer, $allowed) === false) {
// ตรวจสอบนามสกุลไฟล์
$ext = pathinfo(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), PATHINFO_EXTENSION);
if (in_array(strtolower($ext), ['jpg','jpeg','png','gif','webp','pdf'])) {
header('HTTP/1.1 403 Forbidden');
exit;
}
}
}
add_action('init', 'block_hotlinks');
Plugin ที่แนะนำ
- All In One WP Security — มีส่วน Hotlink Protection ในตัว ตั้งค่าได้ทันทีโดยไม่ต้องเขียน Code
- WP Cerber — ป้องกันทั้ง Hotlink และ Malicious Bots พร้อมกัน
อย่างไรก็ตาม วิธีที่ดีที่สุดยังคงเป็นการตั้งค่าระดับ Apache ผ่าน .htaccess เพราะหยุดได้ก่อนที่ WordPress จะโหลดขึ้นมา ประหยัด Server Resources มากกว่า
Redirect ไปรูปเตือนแทนการ Block
แทนที่จะตอบ 403 คุณสามารถ Redirect ไปยังรูปภาพ "No Hotlinking Allowed" เพื่อให้เว็บผู้ hotlink แสดงรูปเตือนแทน:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain\.com/ [NC]
RewriteRule \.(jpg|jpeg|png|gif|webp)$ /img/no-hotlink.jpg [R=302,NC,L]
สร้างรูป no-hotlink.jpg ไว้ใน /img/ เช่นเป็นรูปที่มีข้อความ "Image not available — visit yourdomain.com" แล้วอัพโหลดขึ้นเซิร์ฟเวอร์
อนุญาตหลายโดเมน
หากมีโดเมนหลายตัวที่ต้องการอนุญาต (เช่น CDN หรือ Subdomain อื่น) ให้เพิ่ม RewriteCond หลายบรรทัด:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain2\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^https?://subdomain\.yourdomain\.com/ [NC]
RewriteRule \.(jpg|jpeg|png|gif|webp|pdf)$ - [F,NC,L]
ตรวจสอบว่า Hotlink Protection ทำงานถูกต้อง
หลังตั้งค่าเสร็จ ทดสอบด้วยวิธีเหล่านี้:
- เปิด Developer Tools ในเบราว์เซอร์ → Network Tab
- เข้าดูรูปภาพโดยตรงจาก URL — ต้องโหลดได้ปกติ (เพราะไม่มี Referer)
- สร้างหน้า HTML ชั่วคราวบนโดเมนอื่น (หรือใช้ codepen.io) แล้วฝัง URL รูปของคุณ
- หากตั้งค่าถูกต้อง รูปจะแสดง 403 หรือเปลี่ยนเป็นรูปเตือน
หมายเหตุ: Google Bot และ Social Media Crawler (Facebook, Twitter) ส่ง Referer ที่แตกต่างกัน ถ้าต้องการให้รูป OG Preview ทำงาน ให้เพิ่ม Exception สำหรับ Crawler เหล่านั้น หรือใช้ตัวเลือก "Allow Empty Referer" ในการตั้งค่า
สิ่งที่ควรรู้เพิ่มเติม
- บางเบราว์เซอร์ไม่ส่ง Referer — โดยเฉพาะโหมด Private/Incognito หรือเบราว์เซอร์ที่ตั้ง privacy mode ไว้ ผู้ใช้เหล่านั้นจะยังเข้าถึงรูปได้ปกติ (เพราะ Referer เป็น empty)
- HTTPS → HTTP Referer ถูกซ่อน — เบราว์เซอร์ไม่ส่ง Referer เมื่อลิงก์จาก HTTPS ไปยัง HTTP ดังนั้น Hotlink Protection อาจ Block request ที่มาจาก HTTPS บน HTTP ของคุณได้
- ไม่กระทบ SEO — Google Bot เข้าถึงรูปโดยตรงจาก Crawler ไม่ผ่าน Referer แบบ hotlink จึงไม่กระทบการ Index รูป
ป้องกัน Hotlink ไฟล์เสียงและวิดีโอ
นอกจากรูปภาพ ไฟล์มีเดียอย่าง MP3 MP4 PDF หรือ ZIP ก็สามารถถูก Hotlink ได้เช่นกัน และเนื่องจากไฟล์เหล่านี้มีขนาดใหญ่กว่ารูปมาก ความเสียหายจาก Bandwidth จึงสูงกว่าหลายเท่า
โค้ดตัวอย่างสำหรับป้องกันไฟล์มีเดียโดยเฉพาะ:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain\.com/ [NC]
RewriteRule \.(mp3|mp4|avi|mkv|mov|zip|rar|7z|pdf|docx|xlsx)$ - [F,NC,L]
สิ่งสำคัญที่ต้องระลึกไว้เสมอคือ ผู้ที่ทำ Hotlink ไฟล์วิดีโอขนาดใหญ่อาจทำให้ Bandwidth ของคุณหมดใน 1–2 วัน แม้เว็บของคุณจะมี Traffic ต่ำก็ตาม ดังนั้นควรเพิ่มไฟล์นามสกุลมีเดียทุกประเภทเข้าไปในกฎ RewriteRule เสมอ
การตั้ง Bandwidth Limit สำหรับ Media Files
บนเซิร์ฟเวอร์บางตัวที่รองรับ mod_ratelimit สามารถจำกัดความเร็วดาวน์โหลดเพิ่มเติมได้ เพื่อป้องกันกรณีที่ Hotlink Protection ไม่ทำงาน (เช่น ผู้ Hotlink ใช้ API แทน Browser ที่ส่ง Referer ถูกต้อง):
# จำกัดความเร็ว Download สำหรับไฟล์ขนาดใหญ่ <FilesMatch "\.(mp4|mp3|zip|pdf)$"> SetOutputFilter RATE_LIMIT SetEnv rate-limit 500 </FilesMatch>
ค่า 500 หมายถึงจำกัดที่ 500 KB/s ต่อการดาวน์โหลดหนึ่งครั้ง ทำให้แม้ถูก Hotlink ก็ใช้ Bandwidth น้อยลงอย่างมีนัยสำคัญ ลูกค้าทั่วไปที่ดาวน์โหลดจากหน้าเว็บของคุณจะไม่รู้สึกต่างเพราะความเร็ว 500 KB/s ยังถือว่าเร็วมาก
Hotlink Protection กับ CDN และ Cloudflare
ถ้าเว็บของคุณใช้ CDN หรือ Cloudflare อยู่แล้ว มีตัวเลือกเพิ่มเติมที่ทำงานได้ดีกว่า .htaccess สำหรับการป้องกัน Hotlink
Cloudflare Hotlink Protection
Cloudflare มีฟีเจอร์ Scrape Shield > Hotlink Protection ในหน้า Dashboard เปิดได้ด้วยคลิกเดียว ทำงานที่ Edge ก่อนที่ Request จะถึงเซิร์ฟเวอร์จริง ข้อดีคือ:
- ประหยัด Server Resources มากกว่า .htaccess เพราะ Cloudflare จัดการให้ที่ Edge
- ไม่ต้องแก้ไขไฟล์ใดๆ บนเซิร์ฟเวอร์
- รองรับทุก File Type อัตโนมัติโดยไม่ต้องระบุ Extension
วิธีเปิด: ไปที่ Cloudflare Dashboard → เลือก Domain → Security → Scrape Shield → เปิด Hotlink Protection
การตั้งค่า Whitelist สำหรับ CDN
ถ้าใช้ CDN เช่น Bunny CDN หรือ KeyCDN ร่วมกับเซิร์ฟเวอร์หลัก ต้องเพิ่ม CDN domain ใน Whitelist ด้วย ไม่เช่นนั้น CDN จะ Pull รูปจากเซิร์ฟเวอร์ไม่ได้:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^https?://[^.]+\.b-cdn\.net/ [NC]
RewriteRule \.(jpg|jpeg|png|gif|webp|pdf)$ - [F,NC,L]
แทนที่ b-cdn.net ด้วย Domain ของ CDN ที่คุณใช้จริง ตรวจสอบได้จาก Dashboard ของผู้ให้บริการ CDN
เปรียบเทียบวิธีป้องกัน Hotlink
| วิธี | ระดับ | ความยาก | เหมาะกับ |
|---|---|---|---|
| DirectAdmin GUI | Apache | ง่ายมาก | มือใหม่ |
| .htaccess manual | Apache | ปานกลาง | ต้องการควบคุมละเอียด |
| Cloudflare Scrape Shield | Edge/CDN | ง่ายมาก | ใช้ Cloudflare อยู่แล้ว |
| WordPress Plugin | PHP | ง่าย | เว็บ WordPress |
โฮสติ้งไทยที่รองรับ .htaccess เต็มรูปแบบ
AsiaGB Hosting รองรับ mod_rewrite และ Hotlink Protection ทุกแพ็กเกจ เริ่มต้น 500 บาท/ปี Uptime 99%
ดูแพ็กเกจโฮสติ้ง