Làm thế nào để từ chối truy cập web vào một số tập tin?


13

Tôi cần phải làm một hoạt động hơi lạ.

Đầu tiên, tôi chạy trên Debian, apache2 ('chạy' dưới dạng dữ liệu www của người dùng)

Vì vậy, tôi có tệp văn bản đơn giản với .txt ot .ini hoặc bất kỳ phần mở rộng nào, không quan trọng.

Các tệp này được đặt trong các thư mục con có cấu trúc như thế này:

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

do đó, tên tệp luôn giống nhau, ditto cho 'phân cấp', chỉ cần thay đổi tên của thư mục: /folder-name-static/folder-name-dinamyc/file-name-static.txt

Những gì tôi nên làm là (tôi nghĩ) tương đối đơn giản: Tôi phải có thể đọc tệp đó bằng các chương trình trên máy chủ (ví dụ python, php), nhưng nếu tôi cố gắng truy xuất nội dung tệp bằng broswer (số hóa url www. example.com/folder1/car/foobar.txt hoặc thông qua cUrl, v.v.) Tôi phải nhận được một lỗi bị cấm hoặc bất cứ điều gì, nhưng không truy cập vào tệp .

Cũng thật tuyệt khi ngay cả việc truy cập các tệp đó qua FTP cũng bị 'ẩn' hoặc dù sao cũng không thể tải xuống (ít nhất là tôi sử dụng với dữ liệu gốc và dữ liệu người dùng ftp)

Làm thế nào tôi có thể làm được?

Tôi tìm thấy trực tuyến này, được đặt trong tệp .htaccess:

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

Nó dường như hoạt động, nhưng chỉ khi tệp nằm trong thư mục gốc của web (www.example.com / myfile.txt) chứ không phải trong các thư mục con. Hơn nữa, các thư mục ở cấp độ thứ hai (www.example.com/folder1/ fruit /foobar.txt) sẽ được tạo theo kiểu dinamycally .. Tôi muốn tránh thỉnh thoảng phải thay đổi tệp .htaccess.

Có thể tạo một quy tắc, một cái gì đó tương tự, áp dụng cho tất cả các tệp có tên đã cho, đó là trên * www.example.com / thư mục-name-static / * thư mục-tên-dinamyc / *** tên tệp -static.txt *, trong đó các phần đó đều giống nhau , chỉ là ** có thay đổi không?

CHỈNH SỬA :

Như Dave Drager đã nói, tôi có thể xác định điều này để giữ các tệp đó bên ngoài thư mục có thể truy cập web. Nhưng những thư mục đó cũng sẽ chứa các tệp khác, hình ảnh và nội dung được người dùng của tôi sử dụng, vì vậy tôi chỉ đơn giản là cố gắng không có hệ thống thư mục trùng lặp, như:

/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

Câu trả lời:


19

Bạn có thể sử dụng Files / FilesMatch và một biểu thức thông thường:

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

Đây là cách .htpasswd được bảo vệ.

hoặc chuyển hướng mọi quyền truy cập của .txt sang 404:

RedirectMatch 404 \.txt$

Tôi đã thử sử dụng theo cách đó, nhưng dường như không hoạt động trên tệp trong các thư mục con
Strae

Tôi đã sửa lỗi regexps của mình, xin lỗi ...
rkthkr

ok .. có thể làm việc Nhưng .. regrec sẽ giống như RedirectMatch 404 \ myfilename.txt $, phải không? Các tập tin sẽ luôn có cùng tên, nhưng trong các thư mục khác nhau. Và giải pháp này sẽ không ảnh hưởng đến phương pháp FTP, phải không?
Strae

Điều đó có vẻ đúng ...
rkthkr

Có, tôi xác nhận rằng nó hoạt động ... nhưng regex RedirectMatch 404 \ myfilename.txt $ của tôi phải bị sai .. nó hoạt động nếu tôi sử dụng RedirectMatch 404 \ .txt $, chặn tất cả các tệp .txt, nhưng nếu tôi không sử dụng tên tệp trong regrec. Có ai giúp đỡ không? tôi không phải là một
genuis với regrec

1

Vâng, đây là tất cả có thể. Tuy nhiên, nếu bạn có các chương trình trên máy chủ cần truy cập các tệp văn bản, chúng sẽ nằm trong thư mục gốc của web. Ví dụ: nếu các tệp web của bạn nằm trong ~ / public_html /, bạn nên lưu trữ chúng trong ~ / data. Không có lý do để đặt chúng trong thư mục html công khai.

Ngoài việc xóa chúng khỏi thư mục web, hãy đảm bảo các quyền unix được đặt chính xác trên chúng. Người dùng các tập lệnh sẽ cần có quyền truy cập đọc (ghi?) Nhưng bất kỳ ai khác không phải có quyền truy cập này.

Nếu bạn cần phải có các tệp này trong một thư mục có thể truy cập web, có nhiều cách để thực hiện những gì bạn đang yêu cầu thông qua mod_rewrite. Xem trang web theo dõi để biết nhiều ví dụ, một trong số đó phải phù hợp với hóa đơn.

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


Các tập tin sẽ được tạo thông qua python hoặc php, sau đó, không bao giờ chỉnh sửa lại, chỉ cần đọc.
Strae

0

Tại sao không sử dụng quyền truy cập tệp unix tiêu chuẩn để từ chối quyền truy cập vào tệp?

Có một lời giải thích hợp lý trên wikipedia về quyền truy cập tệp unix


Làm cách nào tôi có thể đặt quyền để cho phép php, python, người dùng root xử lý các tệp đó và không truy cập trình duyệt?
Strae

0

Đặt tệp .htaccess vào thư mục con và trong câu lệnh, đặt AllowOverride All


Vì vậy, tôi sẽ cần một .htaccess cho mỗi thư mục cấp 2 °? mmh .. có thể là một giải pháp .. sẽ tốt hơn với 1 .htacces ..
Strae

0

Bạn có thể sử dụng các ACL Linux .


Istn rằng các quyền đơn giản tập tin? thích rwx? Làm thế nào tôi có thể làm những gì tôi cần với điều này?
Strae

0

Sau khi đọc tất cả các bạn, tôi nhận thấy rằng tệp .htaccess có thể là cách cho tôi: chỉ ảnh hưởng đến các tệp trong thư mục chứa nó.

Nhưng các thư mục của tôi được tạo động. Tôi không nghĩ rằng sao chép tệp .htaccess hoặc tạo lại nó mỗi khi tôi tạo một thư mục mới là một cách đáng tin cậy.

Như Dave đã nói, cách logic nên lưu trữ các tệp văn bản cấu hình bên ngoài thư mục có thể truy cập web.

Nhưng trong mỗi thư mục tôi phải lưu trữ các tệp khác, ví dụ hình ảnh, phải có thể truy cập web ... và tôi vẫn không nghĩ rằng sao chép cấu trúc thư mục, trong và ngoài direvtory gốc web, cũng là một cách đáng tin cậy . Do đó, tôi sẽ cần thay đổi ngay cả cấu hình apache để bao gồm thư mục cấu hình trong đường dẫn được phép của php .. dù sao đây cũng không phải là vấn đề.

Vì vậy, nếu tôi không có cái tốt hơn , tôi phải chọn cái kém hơn .

Bây giờ tôi sẽ sử dụng nhiều giải pháp tệp .htaccess, hy vọng sẽ không phải hối tiếc trong tương lai.

Mọi giải pháp khác đều được đánh giá cao.


0

Từ phần Tài liệu đặt hàng :

Từ khóa chỉ có thể được phân tách bằng dấu phẩy; không có khoảng trắng được cho phép giữa chúng.

Vì vậy, sau đây là không chính xác:

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

Sau đây là (thêm) đúng

<Files "File.txt">
Order allow,deny
Deny from all
</Files>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.