Impedire l'accesso a una pagina dalla barra degli indirizzi

Rikardinho90

Utente Attivo
16 Mar 2009
50
0
0
Ciao, vorrei sapere se esiste un modo per impedire a chi inserisce l'indirizzo di una pagina nella barra degli indirizzi di visualizzare la pagina stessa. Mi spiego meglio: ho una pagina protetta a cui si può accedere tramite password, soltanto che se si digita l'indirzzo di questa pagina protetta nella barra degli indirizzi la pagina si apre tranquillamente. Ecco io vorrei che questo non fosse possibile, per esempio reindirizzando l'utente che apre la pagina dalla barra degli indirizzi alla pagina di login dove inserire user e password. C'è qualcuno che può aiutarmi?
 
ciao
io faccio così, anche se forse esistono sistemi migliori.
1. nella pagina di partenza creo una sessione con una parola strana
es. $_SESSION['autorizzato']="birillo";

2. nella pagina prima pagina riservata (prima di qualsiasi output html) verifico che la sessione esista e che questa sia uguale a "birillo", se non esiste, o diversa, con header location rimando alla pag di log. questo mi fa accedere alla pagina solo se passo attraverso la pagina di creazione della sessione


p.s.
comunque non ti preuccupare tanto interviene alex:D
 
PHP:
<?php
session_start();
if((!isset($_SESSION['autorizzato'])) || ($_SESSION['autorizzato']!='birillo') )
{
header('Location: login.php');
}
?>
 
ciao,
eliox mi ha preceduto, solo una cosa io metto in più così

PHP:
<?php
session_start();
if((!isset($_SESSION['autorizzato'])) || ($_SESSION['autorizzato']!='birillo') )
{
unset($_SESSION['autorizzato']);
header('Location: login.php');
}
?>

cioè annullo la sessione
 
il codice $_SESSION['autorizzato']="birillo"; devo inserirlo così come l'hai scritto tu o devo mettere anche include ecc?
 
ciao
nella pagina di partenza devi scrivere

session_start();
$_SESSION['autorizzato']='birillo';

il codice che ha scritto eliox nella pag riservata

ricordati che in tutte le pagine che utilizzano le sessioni deve esserci l'istruzione session_start();
 
ho fatto come mi avete detto però:
inserisco user e pass nella pagina dove ho il form di accesso e dove ho messo

<? php
session_start();
$_SESSION['autorizzato']='birillo';
?>

prima del tag di <html>

e mi porta alla pagina protetta dove ho messo il codice

<?php
session_start();
if((!isset($_SESSION['autorizzato'])) || ($_SESSION['autorizzato']!='birillo') )
{
unset($_SESSION['autorizzato']);
header('Location: login.php');
}
?>

solo che mi dà lo stesso errore (mi dice login fallito) di quando cerco di accedere alla pagina protetta tramite la barra degli indirizzi. Praticamente adesso , pur inserendo user e pass corretti nel form, mi dice login effettuato, carica 2 secondi la pagina protetta e poi mi dice login fallito
 
ciao
...Praticamente adesso , pur inserendo user e pass corretti nel form, mi dice login effettuato, carica 2 secondi la pagina protetta e poi mi dice login fallito

se ti dice logn fallito non dovrebbe dipendere dal codice che hai scritto.

immagino che tu abbia la pagina di loging con il classico form in cui due campi per inserire user e password + pulsante di submit, il form indirizza alla pagina riservata
nella pag riservata avrai il controllo dell'user e pass immessi e se questi non validi torni alla pg di login. è cosi?

se hai problemi posta i codici delle due pagine (la parte che interessa) così si vede cosa c'è di sbagliato, in quanto a me il metodo funzia.

eventualmente commenta per provare
//unset($_SESSION['autorizzato']);
 
esattamente la pagina è impostata come hai appenba scritto. Prima di inserire i codici che mi avete consigliato funzionava bene, poi, inseriti i codici, mi fa questo scherzo. Qui sotto ti scrivo il codice del file login.php che gestisce tutto:

<?php
//crei array per pass e uno per user
$pass_l=array();
$usrn_l=array();
//metto dei nomi a caso
$pass_l['pinco']="123";
$usrn_l['pinco']="piripacchio";
$pass_l['pallino']="777";
$usrn_l['pallino']="abracadabra";
//...eccetera.......
//cosi vedi a chi attribuisci la pass e user
// potresti fare anche una pagina chiamata password_user.php
//dove metti le righe sopra
// e poi fai
//include_once "password_user.php";
//metti $_POST, anche nel method= del form ( method="post" )
$pass = (isset($_GET['pass'])) ? $_GET['pass'] : '';
$user = (isset($_GET['user'])) ? $_GET['user'] : '';

//e verifichi che le pass e user esistano nell'array

if (in_array($pass, $pass_l) && in_array($user, $usrn_l)){
echo 'Login effettuato, attendere prego... <meta http-equiv="refresh" content="2;url=http://www.*****.altervista.org/Bacheca/bacheca.php">';
//eccetera....
}else{
echo 'Login fallito, ricontrolla username e password inseriti... <meta http-equiv="refresh" content="3;url=http://www.*****.altervista.org/Bacheca/accedi.html">';
//eccetera....
}
?>

come vedi se user e pass sono corretti vieni indirizzato alla pagina bacheca.php(ovvero la pagina protetta) mentre se sono errati torni alla pagina accedi.html in cui c'è il form per inserire user e password e dove ho inserito il comando x inziare la sessione 'birillo'. Mentre in bacheca.html ho messo il codice x verificare se la sessione 'birillo' è stata iniziata. Il codice qui sopra mi pare me l'abbia dato tu stesso poi io ho aggiunto i redirect e modificato gli user e le pass. Comunque ripeto senza qui codici che ho aggiunto adesso alle pagine funziona tutto correttamente, poi inserendo i codici che mi avete dato succede l'errore che ho scritto prima.
 
Ma non potresti effettuare un semplice controllo sul referer? Praticamente il referer è il link sul quale hai cliccato per arrivare a quella pagina. Quindi se ci accedi direttamente tramite l'URL il referer è vuoto. In ogni caso, visto che gli header HTTP si possono camuffare, è meglio effettuare proprio un controllo sul login, come suggerito da borgo e Eliox.
 
non so io mi affido a voi perchè è la prima volta che utilizzo una funzione del genere, aspettiamo che borgo mi aiuti, ho scritto prima tutto il codice ecc, vediamo se riesce ad aiutarmi, cmq alessandro potresti dirmi come funziona quest'ultimo tuo suggerimento sul refer?
 
Praticamente era una cosa di questo genere:
PHP:
<?php
if($_SERVER['HTTP_REFERER'] != 'pagina_tuo_sito')
  die('Non puoi accedere direttamente a questo indirizzo.');
?>
Dove al posto di pagina_tuo_sito andrebbe il link dal quale si accede alla pagina protetta. Però l'unica limitazione è che con i redirect non funziona, l'utente deve per forza cliccare su un collegamento nella pagina.
 
ah ho capito, bè non è male come idea basta che al posto del redirect ci metta un link, appena posso (cioè domani) provo e vediamo come và ;) grazie mille ah 1 cosa, in quale pagina devo inserire questo codice? nella pagina protetta o in quella dove si inseriscono user e pass x accedere?
 
ciao
da quello che capisco ti accedi alla pagina login.php dalla pagina accedi.html e se il log va a buon fine vai alla pagina bacheca.php altrimenti torni alla accedi.html.
vorrei sapere quale è la pagina che devi fare in modo che non venga richiamata da riga di comando.
questo perchè
caso 1:se la pagina è bacheca.php devi fare
nella pagina login.php metti

PHP:
<?php
session_start();
$_SESSION['autorizzato']='birillo';//questa puoi metterla, invece che qui 
//anche nella pos. "A"
//che forse sarebbe meglio

$pass_l=array();
$usrn_l=array();
$pass_l['pinco']="123";
$usrn_l['pinco']="piripacchio";
$pass_l['pallino']="777";
$usrn_l['pallino']="abracadabra";
$pass = (isset($_GET['pass'])) ? $_GET['pass'] : '';
$user = (isset($_GET['user'])) ? $_GET['user'] : '';
if (in_array($pass, $pass_l) && in_array($user, $usrn_l)){
// pos "A"
echo 'Login effettuato, attendere prego... <meta http-equiv="refresh" content="2;url=http://www.*****.altervista.org/Bacheca/bacheca.php">';
}else{
echo 'Login fallito, ricontrolla username e password inseriti... <meta http-equiv="refresh" content="3;url=http://www.*****.altervista.org/Bacheca/accedi.html">';
}
?>
nella pagina bacheca.php
PHP:
<?php
session_start();
if((!isset($_SESSION['autorizzato'])) || ($_SESSION['autorizzato']!='birillo') )
{
	unset($_SESSION['autorizzato']);
	header('Location: login.php');
}
//.......eccetera...............
?>

caso 2: se invece la pagina è login.php, il problema è leggermente diverso in quanto non puoi usare
una pagina chiamata accedi.html ma deve essere chiamata accedi.php

nella pag accedi.php devi mettere
PHP:
<?php
session_start();
$_SESSION['autorizzato']='birillo';
?>
<form action="login.php"..........> tutto il form</form>

e nella pag login.php

PHP:
<?php
session_start();
if((!isset($_SESSION['autorizzato'])) || ($_SESSION['autorizzato']!='birillo') )
{
	unset($_SESSION['autorizzato']);
	header('Location: login.php');
}
//eccetera...................tutto quello che ti serve
?>
 
allora, ho provato il codice proposto da alessando

PHP:
<?php
if($_SERVER['HTTP_REFERER'] != 'pagina_tuo_sito')
  die('Non puoi accedere direttamente a questo indirizzo.');
?>

ok cercando di accede alla pagina dalla barra degli indirizzi mi dà il messaggio "Non puoi accedere direttamente a questo indirizzo." solo che anche dopo aver inserito user e pass corretti compare il messaggio da me impostato "Login effettuato, entra" (dove cliccando su entra si può accede alla pagina protetta) ma anche in questo caso cliccando su entra mi dà comunque l'errore 'Non puoi accedere direttamente a questo indirizzo.' quindi sia ke si inseriscano user e pass corretti sia che si cerchi di accedere alla pagina protetta tramite barra degli indirizzi non è possibile visualizzare la pagina protetta.
 
ciao
due cose
1. ti conviene mettere
if(basename($_SERVER['HTTP_REFERER']) != 'pagina_tuo_sito'){....
così devi scrivere solo il nome della pagina da cui provieni e non (es.)
http://www.miosito.com/caterlla/mia_pagina.php

2. al posto di 'pagina_tuo_sito' devi scrivere il nome della pagina da cui provieni esempio:
if(basename($_SERVER['HTTP_REFERER']) != 'mia_pagina.php'){
 

Discussioni simili