Anti Leech

พอดีนั่งดู log file แล้วเห็นว่ามีคนแอบเอาภาพเราไปใช้นี่นา ซึ่งจริงๆ แล้วผมไม่ได้ซีเรียสอะไรหรอกครับ แต่แค่อยากลองหาอะไรทำสนุกๆ ดูว่าเราจะหาวิธีป้องกันได้ยังไงบ้าง

ลองค้นๆ ดูแล้วก็พบว่าตัวช่วยที่ดีตัวหนึ่งก็คือ .htaccess และ Rewrite module ของ Apache นี่เอง

วิธีการง่ายๆ คือสร้างไฟล์ชื่อ .htaccess แล้วใส่คำสั่งของ Rewrite module ไว้ข้างใน
ดูตัวอย่างเลยก็แล้วกันครับ

1. วิธีนี้คือป้องกันไม่ให้ใครแอบเรียกไฟล์รูปภาพที่มีนามสกุล jpg|jpeg|gif|png|bmp ของเราไปใช้ โดยเมื่อภาพเหล่านี้ถูกเรียกใช้จากเว็บอื่น ภาพที่ปรากฎจะเป็น dot.gif แทน นอกจากนี้จะไม่สามารถเรียกไฟล์นั้นโดยตรงได้ด้วย เช่น จะเรียก http://my.diary.in.th/images/test.jpg ไม่ได้


RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://diary.in.th/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://diary.in.th$ [NC]
RewriteCond %{HTTP_REFERER} !^http://my.diary.in.th/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://my.diary.in.th$ [NC]
RewriteCond %{REQUEST_URI} !^/dot.gif [NC]
RewriteRule .*.(jpg|jpeg|gif|png|bmp)$ http://my.diary.in.th/dot.gif [R,NC]

2. จากข้อที่ 1 หากต้องการให้เรียกดูไฟล์รูปภาพนั้นโดยตรงได้ด้วยก็ให้เพิ่มคำสั่งตัวเข้มเข้าไป


RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://diary.in.th/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://diary.in.th$ [NC]
RewriteCond %{HTTP_REFERER} !^http://my.diary.in.th/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://my.diary.in.th$ [NC]
RewriteCond %{REQUEST_URI} !^/dot.gif [NC]
RewriteRule .*.(jpg|jpeg|gif|png|bmp)$ http://my.diary.in.th/dot.gif [R,NC]

3. หากไม่ต้องการให้ redirect ไปที่เว็บอื่นเลย เช่น http://my.diary.in.th ก็ใช้คำสั่งต่อไปนี้


RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://diary.in.th/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://diary.in.th$ [NC]
RewriteCond %{HTTP_REFERER} !^http://my.diary.in.th/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://my.diary.in.th$ [NC]
RewriteRule .*.(jpg|jpeg|gif|png|bmp)$ http://my.diary.in.th/ [R,NC]

3. หากไม่ต้องการให้แสดงผลเป็นรูปภาพอื่นแทน แต่ให้ปฏิเสธการแสดงผลไปเลยก็ใช้คำสั่งต่อไปนี้


RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://diary.in.th/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://diary.in.th$ [NC]
RewriteCond %{HTTP_REFERER} !^http://my.diary.in.th/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://my.diary.in.th$ [NC]
RewriteRule .*.(jpg|jpeg|gif|png|bmp)$ – [F,NC]

แถมครับ หากเรามีไฟล์มีเดียต่างๆ ที่ไม่ต้องการป้องกันในทำนองเดียวกันนี้ เราก็สามารถทำได้เช่นกัน ดังตัวอย่างต่อไปนี้ครับ

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://diary.in.th/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://diary.in.th$ [NC]
RewriteCond %{HTTP_REFERER} !^http://my.diary.in.th/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://my.diary.in.th$ [NC]
RewriteRule .*.(mp3|mpeg|mpg|ram|rm|wma|wav|asx|wmv|avi|mov|zip|rar|exe)$ http://my.diary.in.th/ [R,NC]

[NC] = “No Case”, meaning match the url regardless of being in upper or lower case letters.
[R] = Redirect

Have fun! :mrgreen:

5 thoughts on “Anti Leech”

  1. ถ้ากรณีนี้
    หากเราลิ้งค์ภายในเวบเราเองเนี่ยครับ
    ใช้แบบ
    ได้ไหมครับ
    หรือต้องแบบนี้อย่างเดียว

    บางทีเขียนกับสคริป php แล้วงงเรื่อง path น่ะครับ
    ตัดปัญหาใช้แบบแรกง่ายดี
    แต่กลัวว่ามันจะโดน htaccess กันไว้รึเปล่าครับ

  2. อ้าวโค้ดหาย 😯

    แบบแรก src=”www.web.com/img/img.jpg” ที่ใช้

    แบบสอง src=”../../img/img.jpg”

    ใช้แบบแรกลิ้งค์ภายในเว็บเราเองได้ไหมครับ

  3. คำถามดูแปลกๆ นะครับ เหมือนจะโดนตัดออกไปบางส่วน?

    ปกติถ้าเรียกใช้ในเว็บเดียวกันแล้วไม่น่าจะมีปัญหาครับ แต่ยังไงก็คงต้องลองทดสอบดูว่าใช้งานได้หรือไม่ด้วยครับ 🙂

  4. ได้ครับ เพราะ referer มาจากเว็บของเราอยู่แล้ว แต่ก็ต้องเรียกใช้ให้ถูกครับ
    src=”http://www.web.com…” ครับ

Leave a Reply

Your email address will not be published. Required fields are marked *