พอดีนั่งดู 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!
ถ้ากรณีนี้
หากเราลิ้งค์ภายในเวบเราเองเนี่ยครับ
ใช้แบบ
ได้ไหมครับ
หรือต้องแบบนี้อย่างเดียว
บางทีเขียนกับสคริป php แล้วงงเรื่อง path น่ะครับ
ตัดปัญหาใช้แบบแรกง่ายดี
แต่กลัวว่ามันจะโดน htaccess กันไว้รึเปล่าครับ
อ้าวโค้ดหาย 😯
แบบแรก src=”www.web.com/img/img.jpg” ที่ใช้
แบบสอง src=”../../img/img.jpg”
ใช้แบบแรกลิ้งค์ภายในเว็บเราเองได้ไหมครับ
คำถามดูแปลกๆ นะครับ เหมือนจะโดนตัดออกไปบางส่วน?
ปกติถ้าเรียกใช้ในเว็บเดียวกันแล้วไม่น่าจะมีปัญหาครับ แต่ยังไงก็คงต้องลองทดสอบดูว่าใช้งานได้หรือไม่ด้วยครับ 🙂
ได้ครับ เพราะ referer มาจากเว็บของเราอยู่แล้ว แต่ก็ต้องเรียกใช้ให้ถูกครับ
src=”http://www.web.com…” ครับ
ลองแล้วใช้ได้ ขอบคุณครับ