DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   PHP (http://www.devprotalk.com/forumdisplay.php?f=9)
-   -   Zabrana pristupa direktnim linkom (http://www.devprotalk.com/showthread.php?t=9357)

slavkan 17. 11. 2010. 03:32

Zabrana pristupa direktnim linkom
 
Imam problem sledece prirode. Napravio sam 2 naloga za aplikaciju (korisnicki i administratorski). Oba naloga imaju svoj meni, znaci ako se loguje obicni korisnik vidi se jedan meni, ako se loguje administrator vidi se drugi meni i naravno to sve resio preko sesija. E sad kako ja da zabranim nekome ko nema pravo da direktno preko url pristupi nekom linku iz menija za koaj nema ovlastenja??? Da uprostim, ni jedan korisnik, pa ni onaj logovani, ne moze da vidi stranicu "registracija.php" koju moze da vidi samo administrator e sad ja treba da zabranim da do te stranice ne moze da se dodje ako neko ukuca http://mojsajt.com/registracija.php. Nadam se da me neko razumio.

eraser 17. 11. 2010. 09:52

Prilikom ucitavanja stranice registracija.php potrebno je ispitati vrednost koja je setovana u sesiji koji je korisnik trenutno logovan, ako je korisnik pripadnik grupe koja moze da vidi stranicu onda tu stranicu treba prikazati a ako ne pripada grupi koja moze da vidi stranicu onda ga treba redirektovati na stranicu za logovanje ili prikazati poruku da korisnik nema prava da pristupi toj stranici.

noviKorisnik 17. 11. 2010. 09:57

... a kako to mogu da vide različiti meni?

Kažeš da je to rešeno preko sesija... isto tako možeš da ispitaš da li želiš da dopustiš korisniku pristup nekoj stranici.

Ako utvrdiš da se dogodila "zabranjena stranica" podesićeš da za se za ispis koristi šablon za grešku, ili iskoristiš redirekciju zahteva na neku drugu stranicu (koju već odabereš prilikom dizajna ponašanja aplikacije).

slavkan 17. 11. 2010. 11:59

Evo kako preko sesija: Imam 3 .inc fajla u zavisnosti ko se logovao prikazujem jedan od njih. U tim .inc fajlovima je meni. U bazi prilikom registracije dodjeljujem korisniku tip i pamtim ga u bazi, A je administrator,K je korisnik koji ce moci da se loguje. E sad ovo sve fino fercera dok ne dodje neka osoba X i kaze http://mojsajt.com/registracija.php a za njega je namjenjen meni 'mainmenu.inc' u kome nema registracija.php no direktnim pristupom preko linka on moze da otvori tu stranicu registracija.php.

Kôd:

<?php
                        if (isset($_SESSION['tip']) && $_SESSION['tip'] === 'K')
                                require ('usermenu.inc');
                        else if (isset($_SESSION['tip']) && $_SESSION['tip'] === 'A')
                                require ('adminmenu.inc');
                        else
                                require ('mainmenu.inc');
                ?>


eraser 17. 11. 2010. 12:23

Samo dodaj na pocetku stranice registracija.php proveru sesije koji je korisnik, ako je odgovarajuci korisnik prikazi stranicu, ako nije samo ga redirektuj da se loguje ili mu prikazi poruku da nema pravo da vidi stranicu.

japan 17. 11. 2010. 12:25

PHP kôd:

if (!isset($_SESSION['tip']) || $_SESSION['tip'] != 'A') {
    
header('Location:index.php'); // ili vec bilo koja strana umesto index.php


Mali savet: koristi .php umesto .inc, i u tim fajlovima proveravaj da li im se pristupa direktno, ili se oni pozivaju iz nekih drugih.

DejanVesic 17. 11. 2010. 12:27

Prosto, iskoristi taj kod na početku registracija.php koji će uraditi die() ili redirekciju za slučaj da ulogovani korisnik nije Admin.

draskom 17. 11. 2010. 12:30

Mislim da nisi pazljivo procitao sta ti navode ljudi u prethodnim postovima.

U sustini na samom pocetku stranice pre bilo kakve obrade kazes ovako nesto:

if (!isset($_SESSION['tip']) || $_SESSION['tip'] !== 'A')
header("Location: index.php");

Znaci ako nema setovanu sesiju ili ako mu vrednost $_SESSION['tip'] nije A (nije admin), posalji ga na index.php.

Ovo ti je samo jedan od nacina, ne moras uopste da ga saljes bilo gde i sl. Cim detektujes da nije admin ne dozvoljavas da se izvrsi dalji deo koda na toj stranici.

EDIT: Sada sam video da sam napisao isti code ko japan :)

noviKorisnik 17. 11. 2010. 12:31

Ako dopuštaš direktan pristup stranici, onda na njoj moraš i da proveravaš.

registracija.php
Kôd:

...
if ( ! isset($_SESSION['tip']) || $_SESSION['tip'] != 'A') die('zabranjen pristup ovoj stranici');
...

Može elegantnije i smislenije, naravno, ali ako potrebu za ovakvom regulacijom imaš samo za jednu stranicu, može i ovako da ostane.

slavkan 17. 11. 2010. 15:39

Citat:

Originalno napisao japan (Napišite 91950)
PHP kôd:

if (!isset($_SESSION['tip']) || $_SESSION['tip'] != 'A') {
    
header('Location:index.php'); // ili vec bilo koja strana umesto index.php


Mali savet: koristi .php umesto .inc, i u tim fajlovima proveravaj da li im se pristupa direktno, ili se oni pozivaju iz nekih drugih.

Hvala puno to je ono sto mi je trebalo.


Vreme je GMT +2. Trenutno vreme je 13:57.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.