2009-04-10 44 views
6

Tôi đã kế thừa ứng dụng có lỗ hổng bảo mật rõ ràng.Hạn chế quyền truy cập tệp vào người dùng php được ủy quyền

Nó có bảo mật dựa trên phiên nhưng tệp tải lên (được người dùng cụ thể) không được bảo mật theo bất kỳ cách nào và chúng được lưu trữ trong cây tệp công khai.

Tên tệp không tuân theo bất kỳ quy ước nào như vậy, khiến chúng khó đoán, nhưng dữ liệu rất nhạy cảm và do đó tôi cần triển khai biện pháp bảo mật để ngăn truy cập tệp trái phép.

Di chuyển vị trí của tệp không thực sự là một tùy chọn, vì vậy tôi đang xem giải pháp htaccess để chuyển tiếp các yêu cầu tới tập lệnh xử lý php.

Có ai có kinh nghiệm triển khai loại điều này hoặc bất kỳ giải pháp thay thế tốt nào không? Ví dụ cụ thể về cú pháp .htaccess được đánh giá rất cao, vì tôi đang đấu tranh trong lĩnh vực này.

Trả lời

6

Không thực sự hiểu tại sao di chuyển chúng không phải là một tùy chọn, vì việc đẩy yêu cầu cho người xử lý có nghĩa là nó không còn quan trọng nơi chúng được lưu trữ. Nhưng bạn là người đàn ông trên hiện trường.

.htaccess trông giống như:

RewriteEngine on 
RewriteRule path/to/where/these/files/live/(.*) /handlerscript.php/$1 

Sau đó, bạn lấy đường dẫn file còn lại và tên từ $_SERVER['PATH_INFO'].

+0

Quên về mod_rewrite .. đây là một giải pháp tốt hơn. – Matt

+0

Cảm ơn, tôi sẽ xem xét giải pháp này - lý do không muốn di chuyển vị trí của tệp là người dùng nhận email có liên kết đến tệp của họ (một lần nữa, không phải tôi tôi đẩy nhanh thêm!). Tôi đoán nó vẫn có thể được thực hiện, nhưng sẽ đòi hỏi một ít công việc để xử lý chuyển hướng? – BrynJ

+0

Có thể đã thêm vào phần trên mà tôi sẽ trả lại người dùng tới lời nhắc đăng nhập trong tương lai (thông qua trình xử lý) nếu họ không đăng nhập. – BrynJ

0

Tôi nghĩ bạn có thể cần phải viết một tập lệnh sẽ phân phối hình ảnh, sau đó sử dụng htaccess để hạn chế hoàn toàn quyền truy cập vào các hình ảnh thực tế từ trình duyệt.

Tập lệnh có thể thực hiện trong đường dẫn web đến hình ảnh, quyết định xem người dùng có quyền truy cập hay không, sau đó sử dụng thứ gì đó như fpassthru để đưa hình ảnh thực vào trình duyệt.

Tất cả các tham chiếu đến hình ảnh sẽ cần được sửa đổi, tuy nhiên, để tham chiếu tập lệnh phân phối.

Vì vậy, thay vì truy cập những hình ảnh với /images/123/5423453245.jpg, nó sẽ được /image.php?images/123/5423453245.jpg

Hoặc một cái gì đó tương tự như thế.

+0

Tôi thấy những gì bạn đang nói, nhưng đó thực sự là những gì tôi cần tránh làm (thay đổi liên kết). Họ không phải là hình ảnh bằng cách này :-) – BrynJ

3

Vâng, bạn có thể làm cho apache phân tích cú pháp .jpg tập tin cho một thư mục nào đó thêm dòng sau vào .htaccess của bạn

AddHandler php5-cgi .jpg 

sau đó bạn có thể thiết lập một tập tin của php để phân tích các yêu cầu cách sự hỗn loạn đã recomending bạn và thực hiện một xác nhận nào đó, sau đó chỉ cần quay trở lại tiêu đề jpeg cùng với hình ảnh đúng u'd muốn hiển thị

đây là một ví dụ

<?php 
if($validUser) 
    { 
    header("Cache-control: No-cache"); 
    header("Pragma: No-cache"); 
    header("Content-Type: image/jpeg"); 
    //correct picture address 
    $img = imagecreatefromjpeg("2326_b_lil.jpg"); 
    imagejpeg($img); 
    } 
    else 
    { 
    //code for error image 
    } 
?> 

pl dễ dàng cho tôi biết nếu bạn muốn có một ví dụ rộng hơn

+0

Các tệp không phải là hình ảnh thường, nhưng có thể là các ảnh đó. Ví dụ của bạn đã cho tôi suy nghĩ mặc dù - nó sẽ không được tốt hơn để chỉ sử dụng readfile hơn là tái tạo hình ảnh (mã của bạn chuyển đổi thành một tập tin màu sắc không nén, sau đó trở lại một jpeg)? – BrynJ

+0

Im chỉ sử dụng chức năng đó để dễ dàng tải dữ liệu tập tin và gửi đến trình duyệt, bạn có thể thay thế thủ tục này bằng fopen đơn giản và lặp lại đầu vào, vì bạn đã gửi tiêu đề jpeg trình duyệt sẽ xen vào nó làm hình ảnh – perrohunter

Các vấn đề liên quan