2012-02-29 24 views
6

Mam projekt PHP jest zasadniczo stroną przetwarzania zamówień dla firmy. Każdy użytkownik w firmie ma dostęp do tej witryny i otrzymuje określone poświadczenia do aplikacji kontrolującej dostęp do stron i funkcjonalności w całym tekście.Dostęp gościa PHP do strony internetowej

Teraz mam prośbę o zezwolenie na dostęp gościa do jednej strony. Złożoność tego żądania polega na tym, że gość będzie za każdym razem inny, a strona będzie inna. Zasadniczo jest to portal umożliwiający klientom, którzy nie mają kont w systemie, ponieważ nie ma żadnego zamówienia na żywo na tej stronie, aby móc uzyskać dostęp i zweryfikować zamówienia i informacje o wysyłce.

Moja myśl, aby to osiągnąć, to ustawienie tabeli bazy danych jako tabeli relacji gościa, która będzie używana do przechowywania identyfikatorów UID, skrótów MD5 i docelowej strony, do której odwołuje się rekord. Uwzględniono również licznik odwiedzin i datę wygaśnięcia. Gdy użytkownik otrzyma wiadomość e-mail, otrzyma link podany w wiadomości e-mail w innym miejscu niż http://website.com/verify/?HASH-KEY.

Po kliknięciu tego łącza Oczekuję, że strona index.php weryfikuje stronę HASH, weryfikuje ją w bazie danych i wyświetla odwołanie do strony w bazie danych w tej lokalizacji zamiast przekierowywać do aplikacji. Umożliwi to dostęp gościa do pojedynczej strony bez konieczności ujawniania struktury witryny lub zmiany konfiguracji autoryzacji użytkownika.

  1. Czy podchodzę do tego rozwiązania we właściwy sposób?
  2. Jak mogę pobrać zawartość jednej strony i wyświetlić ją w innej?
+1

Pozwól, że to wyjaśnię, chcesz systemu drzwi, aby umożliwić bardzo specyficznego gościa, do bardzo specyficznej strony, i że gość sam na stronie, prawda? –

+0

Twoje podsumowanie brzmi poprawnie. – Jeff

+0

Odwołanie do strony, co to jest dokładnie? Powiedziałbym, że twoje podejście jest dobre z tego, co potrafię powiedzieć. – Anton

Odpowiedz

7

1. Czy podchodzę do tego rozwiązania we właściwy sposób?

Tak, mniej więcej.

Niektóre wskaźniki:

  • Upewnij hash generacji ty nasion losowo. Na przykład NIE należy po prostu MD5 identyfikatora klienta lub innego małego/kolejnego numeru, ponieważ mogłoby to ułatwić złośliwemu użyciu wyszukiwanie innych stron.
  • Wygasać zakodowane linki po określonym czasie.

2. Jak mogę pobrać zawartość jednej strony i wyświetlić ją w innej?

Jeśli chcesz, aby ludzie "uzyskiwali dostęp do informacji o zamówieniu i wysyłce", prawdopodobnie powinieneś utworzyć stronę specjalnie dla niego, zamiast próbować przejść przez zwykle bezpieczne strony do niezabezpieczonych gości. Tzn. "Strona potwierdzenia wysyłki", która wypełnia dane według danych podanych w dostarczonym haszowniku.

+0

To ma sens ... więc zamiast przekazywać je do rzeczywistej strony, strona może renderować wiele typów danych, a rekord w bazie danych przechowuje typ informacji lub widok renderowania. Mówisz logicznie, mój przyjacielu. – Jeff

+0

Lepsza odpowiedź niż moja. Dobra robota. –

+0

Ponadto, wymaga 'HTTPS', i niech użytkownik ręcznie wygaśnie link hash w przypadku, gdy przypadkowo osiągnie dzikość. –

0

Jeśli dobrze rozumiem Pana (i myślę, że tak), niż myślę, że podchodzisz do tego poprawnie.

Aby dołączyć zawartość innej strony, zwykle używasz include.

include "/path/to/page.php"; 
+0

To też jest kiepskie i brudne rozwiązanie ... Zastanowię się nad tym, udzielając odpowiedzi Hamisha. Odpowiedziałeś na to pytanie, ale Hamish zapewnia alternatywny widok, który może lepiej odpowiadać moim potrzebom. – Jeff

2

Staram się śledzić to tak dobrze, jak tylko mogę.

Wygląda na to, że powinieneś użyć metody hash i po prostu mieć samodzielną stronę, która wygeneruje pożądaną treść, całkowicie oddzieloną od reszty systemu. Wystarczy umieścić wystarczającą ilość danych w haszującym adresie URL, aby określić, co jest potrzebne.

Coś innego do zrobienia jest użycie znacznika czasu w hash string URL i mieć ten znacznik czasu część losowych bitów, które generują swój hash. Umożliwi to uczynienie URL zasadniczo "wygasają" po pewnym punkcie.

Przykład: url.com/in/123456789865/hash-here

można porównać „123456789865” w tym przykładzie do bieżącego czasu serwera i ustalić, czy jego upłynął. Oczywiście musisz uczynić część "123456789865" częścią szyfrowania hash, aby nadal sprawdzać poprawność:

Powiązane problemy