จะปฏิเสธการเข้าถึงไฟล์บางไฟล์ได้อย่างไร?


14

ฉันต้องทำการผ่าตัดสักหน่อย

ก่อนอื่นฉันจะเรียกใช้บน Debian, apache2 (ซึ่ง 'รัน' ในฐานะผู้ใช้ www-data)

ดังนั้นฉันมีไฟล์ข้อความธรรมดาที่มี. txt ot .ini หรือส่วนขยายใด ๆ ก็ตามไม่สำคัญ

ไฟล์เหล่านี้อยู่ในโฟลเดอร์ย่อยที่มีโครงสร้างดังนี้:

www.example.com/folder1/car/foobar.txt www.example.com/folder1/cycle/foobar.txt www.example.com/folder1/fish/foobar.txt www.example.com/folder1/fruit/foobar .txt

ดังนั้นชื่อไฟล์จะเหมือนกันเสมอเหมือนกันสำหรับ 'ลำดับชั้น' เพียงแค่เปลี่ยนชื่อโฟลเดอร์: /folder-name-static/folder-name-dinamyc/file-name-static.txt

สิ่งที่ฉันควรทำคือ (ฉันคิดว่า) ค่อนข้างง่าย: ฉันจะต้องสามารถอ่านไฟล์โดยโปรแกรมบนเซิร์ฟเวอร์ (python, php เป็นต้น) แต่ถ้าฉันพยายามดึงเนื้อหาไฟล์โดย broswer (ขุด url www example.com/folder1/car/foobar.txt หรือผ่าน cUrl ฯลฯ .. ) ฉันต้องได้รับข้อผิดพลาดต้องห้ามหรืออะไรก็ตาม แต่ไม่สามารถเข้าถึงไฟล์ได้

มันจะเป็นการดีที่แม้แต่การเข้าถึงไฟล์เหล่านั้นผ่านทาง FTP นั้น 'ซ่อนไว้' หรือไม่สามารถดาวน์โหลดได้ (อย่างน้อยฉันก็ใช้กับ ftp root และข้อมูลผู้ใช้)

ฉันจะทำอย่างไร

ฉันพบสิ่งนี้ทางออนไลน์อยู่ในไฟล์. htaccess:

<Files File.txt>
 Order allow, deny
 Deny from all
</ Files>

ดูเหมือนว่าจะทำงานได้ แต่เฉพาะในกรณีที่ไฟล์อยู่ในเว็บรูท (www.example.com / myfile.txt) และไม่ใช่ในโฟลเดอร์ย่อย ยิ่งไปกว่านั้นโฟลเดอร์ในระดับที่สอง (www.example.com/folder1/ fruit /foobar.txt) จะถูกสร้างขึ้นแบบ dinamycally .. ฉันต้องการหลีกเลี่ยงการเปลี่ยนไฟล์. htaccess เป็นครั้งคราว

เป็นไปได้ที่จะสร้างกฎซึ่งเป็นเช่นนั้นสำหรับไฟล์ทั้งหมดที่มีชื่อที่กำหนดซึ่งอยู่ใน * www.example.com / โฟลเดอร์ชื่อคงที่ / * โฟลเดอร์ชื่อ - dinamyc / *** -static.txt * ชิ้นส่วนเหล่านั้นมีความเหมือนกันเพียงใด ** เปลี่ยนไปหรือไม่

แก้ไข :

ดังที่ Dave Drager กล่าวว่าฉันสามารถแยกเซสชั่นนี้ให้ไฟล์เหล่านั้นอยู่นอกไดเรกทอรีที่เข้าถึงได้จากเว็บ แต่ไดเรกทอรีเหล่านั้นจะมีไฟล์อื่น ๆ ภาพและสิ่งต่าง ๆ ที่ผู้ใช้ของฉันใช้ด้วยดังนั้นฉันแค่พยายามไม่มีระบบโฟลเดอร์ที่ซ้ำซ้อนเช่น:

/var/www/vhosts/example.com/httpdocs/folder1/car/[other folders and files here]
/var/www/vhosts/example.com/httpdocs/folder1/cycle/[other folders and files here]
/var/www/vhosts/example.com/httpdocs/folder1/fish/[other folders and files here]

//and, then for the 'secrets' files:

/folder1/data/car/foobar.txt
/folder1/data/cycle/foobar.txt
/folder1/data/fish/foobar.txt

คำตอบ:


21

คุณสามารถใช้Files / FilesMatchและนิพจน์ทั่วไป:

<Files ~ "\.txt$">
    Order allow,deny
    Deny from all
</Files>

นี่คือวิธี. htpasswd ได้รับการคุ้มครอง

หรือเปลี่ยนเส้นทางการเข้าถึง. txt ไปยัง 404:

RedirectMatch 404 \.txt$

ฉันพยายามที่จะใช้วิธีการที่ แต่ดูเหมือนว่าไม่ทำงานในไฟล์ในโฟลเดอร์ย่อย
23411

ฉันคง regexps ฉันขอโทษ ...
rkthkr

ตกลง .. สามารถทำงานได้ แต่ .. regexp ควรเป็น RedirectMatch 404 \ myfilename.txt $ ใช่มั้ย ไฟล์จะเป็นชื่อเดียวกัน แต่ในโฟลเดอร์อื่น และวิธีนี้จะไม่มีผลกับวิธี FTP ใช่ไหม
Strae

ที่มีลักษณะที่ถูกต้อง ...
rkthkr

ใช่ฉันยืนยันว่ามันใช้งานได้ ... แต่ regexp ของฉัน RedirectMatch 404 \ myfilename.txt $ ต้องผิด .. มันใช้งานได้ถ้าฉันใช้ RedirectMatch 404 \ .txt $ ปิดกั้นไฟล์. txt ทั้งหมด แต่ไม่ใช่ถ้าฉันใช้ชื่อไฟล์ ใน regexp ความช่วยเหลือใด ๆ im ไม่ GENUIS กับ regexp;)
Straßeการเดินทาง

1

ใช่มันเป็นไปได้ทั้งหมด อย่างไรก็ตามหากคุณมีโปรแกรมบนเซิร์ฟเวอร์ที่จำเป็นต้องเข้าถึงไฟล์ข้อความพวกเขาควรอยู่นอกเว็บรูท ตัวอย่างเช่นหากไฟล์เว็บของคุณอยู่ใน ~ / public_html / คุณควรเก็บไว้ใน ~ / data ไม่มีเหตุผลที่จะวางไว้ในโฟลเดอร์ html สาธารณะ

นอกเหนือจากการลบออกจากเว็บโฟลเดอร์ตรวจสอบให้แน่ใจว่ามีการตั้งค่าการอนุญาต unix อย่างถูกต้อง ผู้ใช้สคริปต์จะต้องมีสิทธิ์เข้าถึงเพื่ออ่าน (เขียน?) แต่บุคคลอื่นไม่จำเป็นต้องมีสิทธิ์เข้าถึงนี้

หากคุณจำเป็นต้องมีไฟล์เหล่านี้ในโฟลเดอร์ที่เข้าถึงได้บนเว็บมีวิธีการทำสิ่งที่คุณถามผ่าน mod_rewrite ดูเว็บไซต์ติดตามสำหรับตัวอย่างมากมายซึ่งหนึ่งในนั้นควรจะพอดีกับใบเสร็จ

http://perishablepress.com/press/2006/01/10/stupid-htaccess-tricks/


ไฟล์จะถูกสร้างผ่าน python หรือ php จากนั้นไม่ต้องแก้ไขอีกต่อไปเพียงแค่อ่าน
Strae

0

ทำไมไม่ใช้สิทธิ์ไฟล์ unix มาตรฐานเพื่อปฏิเสธการเข้าถึงไฟล์?

มีคำอธิบายที่ดีเกี่ยวกับวิกิพีเดียเกี่ยวกับการอนุญาตไฟล์ unix


ฉันจะตั้งค่าการอนุญาตเพื่อให้ php, python, ผู้ใช้รูทจัดการไฟล์เหล่านั้นและเบราว์เซอร์ที่เข้าถึงไม่ได้อย่างไร
Strae

0

วางไฟล์. htaccess ในไดเรกทอรีย่อยและในคำสั่งให้ตั้งค่า AllowOverride All


ดังนั้นฉันจะต้องมี. htaccess ทุกโฟลเดอร์ระดับ 2 ° mmh .. สามารถเป็นทางออก .. จะดีกว่าด้วย 1. htacces ..
4991

0

คุณสามารถใช้Linux ACLได้


มันคือการอนุญาตไฟล์ง่าย ๆ ? ชอบ rwx ไหม? ฉันจะทำสิ่งที่ฉันต้องการกับสิ่งนี้ได้อย่างไร
Strae

0

หลังจากอ่านคุณทั้งหมดฉันสังเกตเห็นว่าไฟล์. htaccess สามารถเป็นวิธีสำหรับฉัน: มีผลกับไฟล์ในโฟลเดอร์ที่เป็น

แต่โฟลเดอร์ของฉันถูกสร้างแบบไดนามิก ฉันไม่คิดว่าการคัดลอกไฟล์. htaccess หรือสร้างใหม่ทุกครั้งที่สร้างโฟลเดอร์ใหม่เป็นวิธีที่เชื่อถือได้

ดังที่ Dave ได้กล่าวไว้วิธีการที่เป็นตรรกะควรจัดเก็บไฟล์ข้อความการกำหนดค่าภายนอกโฟลเดอร์ที่เข้าถึงได้ทางเว็บ

แต่ในทุก ๆ โฟลเดอร์ฉันต้องเก็บไฟล์อื่น ๆ รูปภาพตัวอย่างที่ต้องสามารถเข้าถึงได้บนเว็บ ... และฉันก็ยังไม่คิดว่าการทำซ้ำโครงสร้างโฟลเดอร์ในและนอกไดเร็คทอรีของเว็บเป็นวิธีที่เชื่อถือได้เช่นกัน . ดังนั้นฉันจะต้องเปลี่ยนแม้กระทั่งการกำหนดค่า apache เพื่อรวมโฟลเดอร์การกำหนดค่าในเส้นทางที่ได้รับอนุญาต php .. นี้ไม่ควรเป็นปัญหาอยู่แล้ว

ดังนั้นถ้าฉันไม่มีสิ่งที่ดีกว่าฉันต้องเลือกสิ่งที่แย่กว่านั้น

ฉันจะใช้โซลูชัน. htaccess หลายไฟล์ในตอนนี้โดยหวังว่าจะไม่เสียใจในอนาคต

ทุกโซลูชันอื่น ๆ ที่ชื่นชม


0

จากส่วนเอกสารคำสั่งซื้อ :

คำหลักสามารถคั่นด้วยเครื่องหมายจุลภาคเท่านั้น ไม่อนุญาตให้มีช่องว่างระหว่างกัน

ดังนั้นต่อไปนี้ไม่ถูกต้อง:

<Files File.txt>
Order allow, deny
Deny from all
</ Files>

ต่อไปนี้ถูกต้อง (เพิ่มเติม)

<Files "File.txt">
Order allow,deny
Deny from all
</Files>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.