บางครั้ง hacker เลือกที่จะ hack ผ่านทางแฟ้ม image เพราะว่าแฟ้มนี้เว็บส่วนใหญ่ จะเปิดให้สามารถ upload ไฟล์ได้ ถือว่าเป็นจุดอ่อนที่สำคัญจุดหนึ่ง เเต่ปิดการรันสคริป ในแฟ้มนี้ ด้วย .htaccess ได้
หลายเว็บ ตั้งค่า permission แฟ้มที่เก็บรูป ให้เป็น 777 ซึ่งเอาไว้รองรับการ upload และแน่นอน หาก hacker สามารถหาช่องโหว่เพื่อ upload script ขึ้นมาได้ นั่นก็หมายความว่า เค้าสามารถ upload อะไรก็ได้ขึ้นมาใส่ในแฟ้มนี้ (ไม่นับกรณีที่โดน php shell)
เราควรปิดแฟ้มรูปภาพให้ไม่สามารถรันไฟล์ php ได้ เพื่อไม่ให้สามารถรันไฟล์ตามที่ต้องการได้
# deny access to all .php files <Files ~ "^.*\.([Pp][Hh][Pp])"> Order allow,deny Deny from all Satisfy All </Files>
คือ ห้ามรัน ไฟล์ที่ลงด้วย .php
ใส่ .htaccess ในแฟ้ม folder ที่ต้องการ (folder ที่ให้อัพโหลดไฟล์รูป image)
ป้องกันการกันรัน PHP Script ในโฟลเดอร์ wp-content/uploads
ทำการสร้างไฟล์ .htaccess ไว้ใน โฟลเดอร์ wp-content/uploads
เขียน rule ลงใน .htaccess
<Files *.php> Order Deny,Allow Deny from all Allow from 127.0.0.1 </Files>
อื่นๆ
http://deweyas.exteen.com/20110413/18-htaccess
ป้องกันการแสดงรายชื่อไฟล์ของ Server ด้วย htaccess
Directory โดยปกติแล้วถ้าเราทำการเรียกไดเร็คทอรี่ใดๆบน Server โดยที่ไดเร็คทอรี่นั้นๆไม่มี default page (เช่น index.php หรือ index.html) จะทำให้ Browser แสดงรายการไฟล์ทั้งหมดในไดเร็คทอรี่นั้นๆออกมา (Directory Listings) เช่น หากเราเรียก xxx.com/img/ Browser ก็จะทำการแสดงรายชื่อรูปทั้งหมดที่มีในโฟลเดอร์ img/ บน Server เป็นต้น
โดยปกติ Server สมัยใหม่มักจะปิดการทำงานในส่วนนี้ไว้ไม่ให้ทำงาน เพื่อเป็นการป้องกันการตรวจสอบว่ามีไฟล์ใดบน Server บ้าง (จาก Hacker) แต่เราก็สามารถควบคุมการเปิดปิด ได้ครับ ด้วย .htaccess
วิธีการง่ายสุดที่จะป้องกันการ list ไฟล์ ก็เพียงแค่สร้าง index.php หรือ index.html เปล่าๆไว้ในไดเร็คทอรี่(ทุกไดเร็คทอรี่) ครับ เนื่องจากโดยปกติแล้ว หากเราเรียกชื่อ ไดเร็คทอรี่ ใดๆ โดยไม่ระบุหน้าเพจ Server จะแสดงหน้านี้ก่อนเสมอ
วิธีที่ 2 กำหนดใน .htaccess
Options +Indexes
สำหรับเปิดใช้งาน แสดงลิสต์รายชื่อไฟล์
Options -Indexes
สำหรับปิดการใช้งาน ไม่ให้แสดงรายชื่อไฟล์ Server จะคืนค่า Error 403 มา
การกำหนดให้ไม่แสดงเฉพาะไฟล์บางนามสกุล เช่นไฟล์ รูปภาพ .jpg .gif
IndexIgnore *.jpg *.gif
Server จะไม่แสดงรายชื่อไฟล์รูปภาพ .jpg และ .gif (แต่ไฟล์อื่นยังแสดงตามปกติ) หรือ
IndexIgnore *
ซี่งจะมีผลเหมือนกับปิดการแสดง Directory Listing
การกำหนดให้ Server แสดงไฟล์ฺ index.html (หรือไฟล์ใดๆ) ในกรณีที่ไม่ระบุ page มา
DirectoryIndex index.html
CMS แอบฝั่ง Script หรือ อัพโหลด Injection file เข้ามา
อาจส่งผลให้เว็บไซต์ที่ใช้งานติด Blacklist จาก Google และ Search Engine ต่างๆ ส่งผลให้เว็บไซต์ตกอันดับ หรือถูกปิดกั้นการค้นหาจากผู้ให้บริการเหล่านี้
วิธีการง่ายๆ เพื่อป้องกัน และเสริมสร้างความปลอดภัยให้ได้ประสิทธิภาพสูงมากคือ
อนุญาติให้ Accesss ใช้งาน CMS ผ่าน index.php เท่านั้น
ถึงแม้ว่าจะถูกแอบอับโหลด หรือถูกวาง Bug ผู้ไม่หวังดีเหล่านั้นก็ไม่สามารถส่งรันไฟล์ดังกล่าวได้ โดย..
สร้างไฟล์ .htaccess ไว้ที่ public_html ของเซิร์ฟเวอร์ เว็บโฮสติ้ง หรือ root path ของเว็บไซต์ เขียนข้อมูลในไฟล์ .htaccess
<Files *.php> Order Deny,Allow Deny from all Allow from 127.0.0.1 </Files> <Files index.php> Order Allow,Deny Allow from all </Files>
ตัวอย่างการเขียน .htaccess ใช้งานจริง
เดิม
<IfModule mod_rewrite.c> RewriteEngine On ErrorDocument 404 /index.php ErrorDocument 500 /index.php </IfModule>
แบบนี้ทำให้ error 404 , 500 วิ่งกลับไปที่ index.php เเต่อ้างอิง path ของ style.css หรือ image ผิด ตาม url ที่เราใส่ผิดไป จึงทำให้ ไฟล์เหล่านี้ไม่ทำงาน
เช่น ปกติ รูปจะเป็น cymiz.com/img/xxx.png
แต่ใส่ลิ้งผิดเข้าไป เช่น cymiz.com/dsf
ผลคือ วิ่งไปหน้า index.php ลักษณะ แบบนี้ cymiz.com/dsf/index.php ทำให้รูปเเล้ว ไฟล์ต่างๆ อ้างอิง path ผิดไปหมด หน้า index.php จึงเเสดงผิดเพี้ยน วิธีแก้ให้ทำตาม วิธีใหม่ ด้านล่างนี้
ใหม่
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
อื่นๆ
http://www.thaiseoboard.com/index.php/topic,317488.0.html
webub.com/การเขียนโค้ดเล็กน้อยให้%20URL%20Friendly%20ด้วย%20%20hta-1314-48/
Mod Rewrite Syntax การเขียน .htaccess อย่างง่ายช่วยย่อ url ที่ยาวให้สั้นลงและมีผลต่อการทำ seo
คำสั่ง Mod Rewrite ที่เขียนนั้นจะต้องบันทึกเป็นไฟล์ .htaccess ไว้ใน Directory ของเว็บไซต์ ซึ่ง Syntax Mod Rewrite หรือคำสั่งที่ใช้ในการเขียนก็ตั้งแต่ Basic จนถึง Advance ตอนนี้เราก็มาดูคำสั่งแบบ Basic ที่ใช้กันส่วนมากกันก่อนครับ
การที่จะให้งานคำสั่ง Mod Rewrite ได้นั้นจะต้องตั้งค่า httpd.conf Mod Rewrite ใน Appserv ก่อนนะครับ แล้ว การเขียนคำสั่งใน Appserv กับ IIS จะไม่เหมือนกันนะครับ แต่คล้ายๆกัน แต่ผมจะแนะนำการเขียนใน Appserv นะครับเพราะส่วนใหญ่จะใช้ Appserv กัน
ไฟล์ .htaccess
#คำสั่งแรก RewriteEngine On เป็นคำสั่งเปิดใช้งาน mod rewirte เครื่อง # เป็นเครื่องหมายที่ใช้ในการ Comment
RewriteEngine On
#คำสั่ง RewriteBase คำสั่งให้สามารถให้งานฟังก์ชั่นของ PHP Version ต่ำกว่า Version ปัจจุบันได้ หรือสามารถอ่านคำสั่งอักขระพิเศษที่ Server ปิดการใช้งานไว้ อันนี้ตามที่ผมเข้าใจ
php_flag register_globals on
#คำสั่งเรียกที่พาสของเว็บไซต์ ถ้าไม่มีก็ไม่ต้องใส่ ถ้าเก็บไฟล์เว็บไว้ในโฟล์เดอย่อยไปอีกก็จะเขียน เช่น RewriteBase / helloworld คือเราเก็บไฟล์เว็บไว้ใน www/helloworld ถ้าไม่มีก็ใส่แค่ ส่วนใหญ่จะเป็นทดสอบใน localhost
RewriteBase
#คำสั่ง RewriteRule เป็นการกำหนดเงื่อนไขที่จะทำการแปลง URL เช่น
RewriteRule
ส่งค่าตัวแปรเดียว
#RewriteRule ^(.*)$ ?option=topic&view=detail&name1=$1 #RewriteRule ^([a-zA-Z0-9_-]+)$ ?option=topic&view=detail&name1=$1 #RewriteRule ^(.*).html$ ?option=topic&view=detail&name1=$1
ส่งค่ามากกว่า 1 ตัวแปร
#RewriteRule ^(.*)-^(.*)$ ?option=topic&view=detail&name1=$1&name2=$2 #RewriteRule ^(.*)-^(.*).html$ ?option=topic&view=detail&name1=$1&name2=$2
^(.*)$
ความหมายคือ ส่งค่าอะไรมาก็ได้
^([a-zA-Z0-9_-]+)$
ความหมายคือ ค่าที่ส่งมาได้เฉพาะค่าที่กำหนดเท่านั้น คือ 0-9 กับอักษร a-z A-Z เท่านั้น
โดยจะส่งค่าไปที่ตัวแปร $1 จะเป็น ID หรือ ชื่อหัวข้อก็ได้ เวลาจะเรียกก็อย่าง เช่น
www.example.com/rewriterule อันนี้เป็น URL Mod Rewirte
www.example.com/rewriterule.html อันนี้เป็น URL Mod Rewirte
www.example.com/?option=topic&view=detail&name=rewriterule อันนี้เป็น URL จริงที่ทำงานอยู่ภายใน
#คำสั่ง ErrorDocument 404 เป็นคำสั่งตรวจสอบไฟล์ 404 คือไม่พบไฟล์ที่ส่งมา โดยจะต้องสร้างไฟล์ 404.htnl ไว้ใน Directory ของเว็บไซต์ วิธีเขียน
ErrorDocument 404 /helloworld/404.html
สรุปไฟล์ .htaccess
RewriteEngine On RewriteBase / hellworld #กรณีทดสอบใน localhost ใส่พาสที่อยู่ของเว็บ RewriteBase / hellworld RewriteRule ^(.*)$ ?option=topic&view=detail&name1=$1 #เวลาเรียก URL เช่น www.example.com/rewriterule ErrorDocument 404 /helloworld/404.html
ครบถ้วน
http://xvlnw.com/read/1921
อื่นๆ
seo.clisk.co.th/article/mod-rewrite-เพื่อ-SEO.html
ป้องกันการโดนดึงรูปไปใช้ (.htaccess)
RewriteEngine On RewriteCond %{HTTP_REFERER} !^http://(.+\.)?myweb\.com/ [NC] RewriteCond %{HTTP_REFERER} !^$ RewriteRule .*\.(jpe?g|gif|png)$ http://www.myweb.com/images.gif [NC,R,L]
ตรวจสอบจากค่า HTTP_REFERER หรือตัวที่ทำการ request รูปนั้นๆเข้ามาว่าทำการเรียกมาจากที่ใด
โดยหากไม่ได้ทำการเรียกมาจากเว็บของเรา (myweb.com) ก็จะให้รูปที่แสดงเป็นรูป http://www.myweb.com/images.gif
.htaccess ไปใส่ไว้ใน folder path ที่เราต้องการจะป้องกัน เช่น ต้องการป้องกัน folder images ก็เอาไปใส่ไว้ใน folder นั้นๆ images/.htaccess
หากใส่ไว้ใน public_html หมายถึงทั้งเว็บ (ไม่แนะนำ)
ข้อควรระวัง
– กรณีเรามีการแลกลิ้งค์ แลกแบนเนอร์กัน
– การดึงรูปจากเว็บในเครือของตัวเอง
http://www.altlab.com/htaccess_tutorial.html