Mam bardzo konkretny przypadek użycia, w którym witryna zbudowana dla prawnika, a każdy z jego klientów może zalogować się do własnej „określonej strony / portalu” (niestandardowy typ postu) bez możliwości dostępu do wp-admin itp. (Stworzyłem wszystkie strony logowania / rejestracji / edycji profilu w interfejsie). Na tej stronie / portalu prawnik pozostawi klientowi wiadomości i pliki do pobrania , teraz teoretycznie jeden klient może odgadnąć (lub jeśli ma wiedzę o plikach innego klienta) inne nazwy plików i pobrać, a tym samym stworzyć problem z prywatnością / bezpieczeństwem / poufne materiały itp.
Szukam pomysłów / koncepcji rozwiązania, początkowo myślałem, że link do pobierania wskazuje na download.php wysyłający identyfikator załącznika, identyfikator użytkownika, identyfikator strony / portalu i nonce, a po drugiej stronie to przetwarzam. .
co myślisz? czy jestem na dobrej drodze, czy to podejście jest wadliwe?
Dzięki!
Odpowiedzi:
To, co musi się zdarzyć, to konieczność przesłania przez proxy żądań pobierania żądanych typów plików za pośrednictwem WordPress. Załóżmy, że ograniczysz dostęp do plików „.doc”.
1. Zdefiniuj zmienną zapytania, która wskazuje żądany plik
2. Zaktualizuj .htaccess, aby przekazywać żądania plików zastrzeżonych do WordPress
Spowoduje to przechwycenie żądań do plików, które chcesz ograniczyć, i odesłanie ich z powrotem do WordPress przy użyciu niestandardowej zmiennej zapytania powyżej. Wstaw następującą regułę przed
RewriteCond
wierszami.3. Przechwyć żądaną nazwę pliku w niestandardowej zmiennej zapytania; i sprawdź dostęp do pliku:
Uwaga: To rozwiązanie działa tylko w przypadku instalacji w jednym miejscu ! Wynika to z faktu, że WordPress MU już przekazuje przesłane żądania plików w podstronach przez
wp-includes/ms-files.php
. Istnieje również rozwiązanie dla WordPress MU, ale jest nieco bardziej zaangażowane.źródło
intercept_file_request
lub że jest ona gdziekolwiek wywoływana, w jaki sposób ta funkcja jest uruchamiana?wp
, zaktualizowałem przykład.Niedawno miałem podobny problem i napisałem o tym artykuł .
Zakładam, że pliki do pobrania są przesyłane za pomocą obsługi multimediów WordPress - w przeciwnym razie masz identyfikator załącznika do pobrania.
Zarys rozwiązania
.htaccess
blokowanie wszelkich prób bezpośredniego dostępu do plików w katalogu przesyłania (lub jego podkatalogu) - np. Przezmysite.com/wp-content/uploads/conf/2012/09/myconfidentialfile.pdf
)Ostrzeżenia
.htaccess
celu zapewnienia bezpieczeństwa . Jeśli nie jest to dostępne / włączone (na przykład serwery Nginx), nie uzyskasz większego bezpieczeństwa. Możesz uniemożliwić użytkownikowi przeglądanie katalogu uplods. Ale bezpośredni dostęp będzie działał.Blokowanie bezpośredniego dostępu
Aby to zrobić w folderze przesyłania (lub w podfolderze - wszystkie poufne materiały muszą znajdować się na dowolnej głębokości w tym folderze). Umieść
.htaccess
plik z następującymi danymi:Poniżej zakładam, że będziesz dołączać poufne materiały do postu typu „klient”. Wszelkie media przesłane na stronę edycji klienta będą przechowywane w
uploads/conf/
folderzeFunkcja konfiguracji chronionego katalogu przesyłania
Przesyłanie poufnych materiałów
Po wykonaniu tej czynności przesłane treści powinny znajdować się w środku,
uploads/conf
a próba uzyskania do nich bezpośredniego dostępu za pomocą przeglądarki nie powinna działać.Pobieranie zawartości
To jest łatwe. Adres URL pobierania może być czymś
www.site.com?wpse26342download=5
(gdzie 5 to identyfikator załącznika przesłanej treści). Używamy tego do identyfikacji załącznika, sprawdzania uprawnień bieżącego użytkownika i umożliwienia mu pobrania.Najpierw skonfiguruj zmienną zapytania
Teraz skonfiguruj detektor, aby (być może) uruchamiał pobieranie ...
Komentarze końcowe
Powyższy kod może zawierać błędy / błędy składniowe i jest nieprzetestowany i używasz go na własne ryzyko :).
Adres URL pobierania można „wstępnie zapisać” za pomocą przepisywania. Jak stwierdzono w komentarzach, możesz dodać puste miejsce
index.php
w każdym podrzędnym chronionym folderze, aby zapobiec przeglądaniu - ale i tak powinny temu zapobiec.htaccess
reguły.Bardziej bezpieczną metodą byłoby przechowywanie plików publicznych poza katalogiem publicznym. Lub w usłudze zewnętrznej, takiej jak Amazon S3. W przypadku tego ostatniego musisz wygenerować prawidłowy adres URL, aby pobrać plik z Amazon (używając klucza prywatnego). Oba wymagają pewnego poziomu zaufania do usług hosta / strony trzeciej.
Byłbym ostrożny wobec używania jakichkolwiek wtyczek, które sugerują, że oferują „chronione pliki do pobrania”. Nie znalazłem żadnych, które zapewniają wystarczająco dobre bezpieczeństwo. Proszę również nie brać pod uwagę tego rozwiązania - i chętnie przyjmę wszelkie sugestie lub krytykę.
źródło
Prawdopodobnie znasz tę sztuczkę. Ten kod sprawdzi bieżącą zalogowaną nazwę użytkownika i jeśli się zgadza, wyświetli link do pobrania tego pliku, w przeciwnym razie nic nie pokaże.
oto kod:
Nie będzie to jednak dobre podejście, ponieważ pliki są przechowywane na serwerach, każdy z linkiem może pobrać ten plik.
źródło
Zakładam, że te informacje są poufne i dlatego oprócz ukrywania linków do plików, naprawdę chcesz, aby były one całkowicie niedostępne dla kogokolwiek w sieci, nawet jeśli zgadną adres URL, chyba że użytkownik ma wyraźne pozwolenie na pobranie pliki.
Sprawdź, jak bezpiecznie przechowywać pliki w Amazon S3, a następnie podaj do pliku wstępnie podpisane (ograniczone czasowo) adresy URL, pod warunkiem, że zostały spełnione prawidłowe kontrole bezpieczeństwa (tj. Użytkownik zalogował się na Twojej stronie i jest tym, za kogo się podaje).
Istnieje bardzo dobry zestaw SDK AWS, który sprawia, że jest to bardzo proste.
Musisz zbadać, w jaki sposób wysyłać pliki przesłane przez interfejs przesyłania WP do S3, zamiast tego zbudować własny program do przesyłania .
Inną opcją byłoby zbyt zajrzenie do kodu WP e-commerce . Oferują bezpieczne pobieranie plików oprogramowania (np. MP3). Uważam, że pliki są konwertowane na skróty za pomocą klucza szyfrowania, który jest generowany na użytkownika przy zakupie. To zajmie trochę odszyfrowania, aby zobaczyć, jak to działa, ale proces nie będzie unikalny dla tej wtyczki, więc inne przykłady będą dostępne (gdzieś).
źródło
Myślę, że szyfrowanie plików jest sposobem, aby przejść jak powyższa odpowiedź. Na Wordpress.org znajduje się wtyczka, która pozwala chronić pobierane pliki. http://wordpress.org/extend/plugins/download-protect/ Możesz także skorzystać z usługi Amazon lub dysku Google. Istnieje wiele usług oferujących chronione pliki do pobrania, takie jak drop box.
źródło