ปฏิเสธการเข้าถึงโฟลเดอร์เฉพาะใน. htaccess


131

ฉันพยายามปฏิเสธไม่ให้ผู้ใช้เข้าถึงsite/includesโฟลเดอร์โดยการจัดการ URL

ฉันไม่รู้ว่าฉันต้องปฏิเสธทุกอย่างและสร้างข้อยกเว้นแต่ละรายการด้วยตนเองเพื่ออนุญาตถ้าฉันสามารถปฏิเสธโฟลเดอร์นี้ได้หรือว่ามีฟังก์ชันเขียนซ้ำที่สามารถใช้ได้

ตัวอย่างเฉพาะ: ฉันไม่ต้องการเห็นไฟล์ไดเร็กทอรีโดยพิมพ์localhost/site/includesลงใน URL


1
เพียงเพื่อไม่อนุญาตให้รายการไดเรกทอรีเขียนOptions -Indexesในไฟล์. htaccess ที่อยู่ในโฟลเดอร์รูท

คำตอบ:


206

สร้างsite/includes/.htaccessไฟล์และเพิ่มบรรทัดนี้:

Deny from all

5
เฮ้ !! anubhava ฉันเคยใช้สิ่งนี้เพื่อปิดการเข้าถึงโดยตรงไปยังไฟล์ api ของฉันภายในโฟลเดอร์ / api แต่ตอนนี้การเรียกใช้เว็บบริการทั้งหมดส่งสถานะต้องห้าม 403 .. ฉันแค่ต้องการบล็อกการเข้าถึงเมื่อมีคนเข้าถึงจากเบราว์เซอร์
ravisoni

9
สำหรับเว็บเซิร์ฟเวอร์ไม่มีความแตกต่างอย่างแท้จริงระหว่างคำขอระหว่างเบราว์เซอร์และไม่ใช่เบราว์เซอร์
anubhava

ฉันใช้ nginx และไม่สามารถใช้.htaccessไฟล์. ดังนั้นวิธีที่ฉันสามารถทำที่ไม่.htaccess? ขอบคุณ
Shafizadeh

ฉันจะเข้าถึงไฟล์ของโฟลเดอร์ / โฟลเดอร์ย่อยได้อย่างไรถ้าฉันปฏิเสธจากทั้งหมด? ไฟล์ในโฟลเดอร์ / โฟลเดอร์ย่อยให้ข้อผิดพลาด 404
Vikas Khunteta

2
Deny from allจะไม่ให้ 404 แต่เป็น 403 คุณยังสามารถเข้าถึงไฟล์ / โฟลเดอร์โดยใช้ PHP / Perl และอื่น ๆ แต่ไม่ได้ใช้คำขอทางเว็บ คุณสามารถเปิดคำถามใหม่ได้หากคำถามนั้นไม่ตอบโจทย์ของคุณ
anubhava

52

คุณยังสามารถปฏิเสธการเข้าถึงโฟลเดอร์โดยใช้ RedirectMatch

เพิ่มบรรทัดต่อไปนี้ใน htaccess

RedirectMatch 403 ^/folder/?$

นี้จะกลับมาเป็น403 forbiddenข้อผิดพลาดสำหรับโฟลเดอร์เช่น: http://example.com/folder/แต่มันปิดกั้นการเข้าถึง Doest ^/folder/.*$ไฟล์และโฟลเดอร์ในโฟลเดอร์ว่าถ้าคุณต้องการที่จะปิดกั้นทุกอย่างภายในโฟลเดอร์แล้วเพียงแค่เปลี่ยนรูปแบบการ

อีกทางเลือกหนึ่งคือเปิดใช้งานmod-rewrite If url-rewrting-moduleคุณสามารถใช้สิ่งต่อไปนี้ในroot/.htaccss:

RewriteEngine on

RewriteRule ^folder/?$ - [F,L]

นี้ภายในแผนที่จะขอให้มีfolderการforbiddenหน้าข้อผิดพลาด


1
ด้วย Apache 2.22 ทางออกที่ดีที่สุดคือตัวแรก: RedirectMatch .....
John

6
ชอบคำตอบนี้มากกว่าการสร้าง.htaccessไฟล์หลายไฟล์ในทุกไดเรกทอรีที่ฉันต้องปฏิเสธการเข้าถึง
DanMad

40

ใน.htaccessไฟล์คุณต้องใช้

Deny from  all

ใส่สิ่งนี้site/includes/.htaccessเพื่อทำให้เฉพาะกับincludesไดเร็กทอรี

หากคุณต้องการเพียงไม่อนุญาตให้แสดงรายการไฟล์ไดเรกทอรีที่คุณสามารถใช้ได้

Options -Indexes 

2
สิ่งนี้เกิดซ้ำหรือไม่?
Abdillah

@Abdillah ใช่แล้ว
Oliver M Grech

18

เราจะตั้งค่าไดเร็กทอรีให้ปลอดภัยมากโดยปฏิเสธการเข้าถึงไฟล์ทุกประเภท ด้านล่างนี้คือรหัสที่คุณต้องการแทรกลงในไฟล์. htaccess

Order Allow,Deny 
Deny from all 

เนื่องจากตอนนี้เราได้ตั้งค่าความปลอดภัยแล้วตอนนี้เราจึงต้องการอนุญาตให้เข้าถึงประเภทไฟล์ที่เราต้องการ โดยเพิ่มรหัสด้านล่างลงในไฟล์. htaccess ใต้รหัสความปลอดภัยที่คุณเพิ่งใส่เข้าไป

<FilesMatch "\.(jpg|gif|png|php)$">
Order Deny,Allow
   Allow from all
</FilesMatch>

.htaccessไฟล์สุดท้ายของคุณจะมีลักษณะดังนี้

Order Allow,Deny 
Deny from all 

<FilesMatch "\.(jpg|gif|png|php)$">
Order Deny,Allow
   Allow from all
</FilesMatch>

ซอร์สจากอนุญาตให้เข้าถึงไฟล์บางประเภทในไดเร็กทอรีที่มีการป้องกัน


คำตอบนี้ช่วยให้ฉันปวดหัวมาก ใช้งานได้เหมือนมีเสน่ห์
ฉันพยายามอย่างหนัก แต่ฉันร้องไห้หนักกว่าเมื่อ

9

คุณสามารถสร้างไฟล์. htaccess สำหรับโฟลเดอร์ซึ่งควรปฏิเสธการเข้าถึงด้วยไฟล์

Deny from  all

หรือคุณสามารถเปลี่ยนเส้นทางไปยังเพจ 404 ที่กำหนดเอง

Redirect /includes/ 404.html

6

เพียงใส่. htaccess ลงในโฟลเดอร์ที่คุณต้องการ จำกัด

## no access to this folder

# Apache 2.4
<IfModule mod_authz_core.c>
    Require all denied
</IfModule>

# Apache 2.2
<IfModule !mod_authz_core.c>
    Order Allow,Deny
    Deny from all
</IfModule>

ที่มา: MantisBTแหล่งที่มา


4

คุณยังสามารถวางสิ่งนี้ไว้IndexIgnore * ที่ไฟล์. htaccess รูทของคุณเพื่อปิดการใช้งานรายชื่อไฟล์ของไดเรกทอรีเว็บไซต์ทั้งหมดของคุณรวมถึง sub-dir


6
สิ่งนี้ไม่ได้ปิดใช้งานการแสดงรายการไฟล์ แต่บอกให้ autoindexer ละเว้นไฟล์ทั้งหมดเมื่อสร้างดัชนี หากต้องการปิดใช้งานรายชื่อไฟล์คุณจะต้องใช้Options -Indexesหากต้องการรายชื่อไฟล์ที่ปิดการใช้งานที่คุณต้องการใช้
Vladimir Kornea

3

การสร้าง index.php, index.html, index.htm ไม่ปลอดภัย เพราะทุกคนสามารถเข้าถึงไฟล์ของคุณภายในไดเร็กทอรีที่ระบุโดยการเดาชื่อไฟล์ เช่นhttp://yoursite.com/includes/file.dat ดังนั้นวิธีที่แนะนำคือการสร้างไฟล์. htaccess เพื่อปฏิเสธผู้เยี่ยมชมทั้งหมด) มีความสุข !!


2

คุณสามารถทำแบบไดนามิกในลักษณะนั้น:

mkdir($dirname);
@touch($dirname . "/.htaccess");
  $f = fopen($dirname . "/.htaccess", "w");
  fwrite($f, "deny from all");
fclose($f);

0

ด้วยเหตุผลบางประการที่ฉันไม่เข้าใจการสร้างโฟลเดอร์ / .htaccess และการเพิ่ม Deny from All ล้มเหลวในการทำงานสำหรับฉัน ฉันไม่รู้ว่าทำไมดูเหมือนง่าย แต่ไม่ได้ผลการเพิ่ม RedirectMatch 403 ^ / โฟลเดอร์ /.*$ ไปยังรูท htaccess แทน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.