Consiglio su tenere una pag protetta

  • Creatore Discussione Creatore Discussione Frank10
  • Data di inizio Data di inizio

Frank10

Utente Attivo
4 Mar 2011
190
1
18
Ho creato un sito in HTML e PHP dove i post (gli argomenti) vengono modificati attraverso un interfaccia grafica semplificata. Ora il fatto è che chiunque teoricamente digitando:
www.miosito.it/interfaccia può modificare i contenuti. Come posso fare per proteggere quella pagina ? Avevo pensato ad una password e user prestabilito (tanto solo io ci entro) che mi faccia andare alla pagina richiesta. Ho trovato qualche codice per questo fatto ma con un semplice tasto (visualizza sorgente pagina) è verificabile quale è la pssword e l'user. Quindi, come al solito chiedo a voi!

Grazie!
 
ciao
se la pag è php non vedi l'user e pass
ti fai il classico form per inserire l'user e la pass che punta alla pagina che ti interessa
la pag che ti interesssa deve essere .php
es.
PHP:
<?php
/*
ti conviene in una pag a parte, farti un poccolo script con le seguenti due righe, lanciarlo e copiare i due risultati
echo sha1("username che utilizzerai")."<br>";
echo sha1("password che utilizzerai")."<br>";
questo impedisce comunque di conoscere quale è l'user e la pass anche se uno riuscisse a scaricare la pagina via fpt
*/

$user="qui copi il risultato dell'user";
$pass="qui copi il risultato della pass";
if(isset($_POST['user']) && isset($_POST['pass']){
	if(sha1($_POST['user'])== $user && sha1($_POST['pass'])== $pass){
		/*e qui metti tutto quello che devi fare
		.................
		.................
		*/
	}else{
		header("location:nome_pag_che vuoi.php");
		exit();
	}
}else{
	header("location:nome_pag_che vuoi.php");
	exit();
}
?>
se poi ti interessa anche altre pagine riservato su cui puoi navigare
puoi usare le sessioni da trasmettere da una riservata ad un altra riservata
 
Ciao,
Grazie per la risposta, però sono molto ignorante sul punto degli script. Come faccio per creare il medesimo script? poi che estensione devo darli?

Grazie e scusa per l'incompetenza ma sono alle prime armi con il php e script.
 
ciao
se nello script c'è del php la pagina DEVE avere estenzione .php
se es chiami una pag con dentro del php pinco.htm il bw NON interpreta il php che appare quindi come se fosse un semplice testo e quindi lo vedi.
al contrario se in una pag. php ci può stare perfettamente del codice html, il bw , quando incontra i tag <?php .... ?> chiama l'interprete e se lo fa tradurre in html.
(il bw è un po' gnocco conosce solo l'html e quindi ha bisogno di qualcuno che traduca il codice php in html, un po' come faccio io con la lingua inglese)
quindi (non so che editor usi, io uso dream) comunque per scrivere codice php ti basta il semplice blocco note, NON word)
quindi venendo a noi.
1. scrivi con blocco note la parte per ricavere l'user e pass codificata (al posto di username che utilizzerai scrivi il tuo user e la tua pass)
PHP:
<?php
echo sha1("username che utilizzerai")."<br>";
echo sha1("password che utilizzerai")."<br>"; 
?>
la salvi con nome (es) codPass.txt, lo rinomini in codPass.php lo carichi e lo lanci, e ti scrivi quell'accozaglia di numeri e lettere da qualche parte (copy/paste)
2. poi fai la pag riservata.php che è quella che ti ho postato prima
nella variabili $user e $pass metti rispettivamente quell'accozaglia di numerei che ti eri scritto
nella parte tra i commenti /* qui metti.......*/ scrivi quello che devi fare, se ti serve scrivere dall'html puro esci da php e poi rientri, es.

PHP:
<?php
//........
if(sha1($_POST['user'])== $user && sha1($_POST['pass'])== $pass){ 
/*e qui metti tutto quello che devi fare...*/
?>
<a haref="pinco.php">clicca</a>
<?php
    }else{
//...
?>
comunque prova a fare qualcosa e postalo
 
Ciao,
Allora la situazione che ho è la seguente:

File di autenticazione:
Codice:
<?php 
/* 
ti conviene in una pag a parte, farti un poccolo script con le seguenti due righe, lanciarlo e copiare i due risultati 
echo sha1("username che utilizzerai")."<br>"; 
echo sha1("password che utilizzerai")."<br>"; 
questo impedisce comunque di conoscere quale è l'user e la pass anche se uno riuscisse a scaricare la pagina via fpt 
*/ 

$user="d033e22ae348aeb5660fc2140aec35850c4da997"; 
$pass="5f5fef3b5e053d07eaaf1f65bb872c0b74f8b0a2"; 
if(isset($_POST['user']) && isset($_POST['pass']){ 
    if(sha1($_POST['user'])== $user && sha1($_POST['pass'])== $pass){ 
     
	 header("location:software/index.php");
	 
    }else{ 
        header("location:nome_pag_che vuoi.php"); 
        exit(); 
    } 
}else{ 
    header("location:nome_pag_che vuoi.php"); 
    exit(); 
} 
?>

Avviato questo file dovrei visualizzare la pag con la richiesta di autenticazione e dopo poter entrare nella cartella software (che è quella che gestisce i post).Mi viene un dubbio ovvero:
Se io digito sul browser www.miosito.it /PAGAUTENTICAZIONE lui mi farebbe accedere ma se digito www.miosito.it/software lui mi va cmq senza passare dall'autenticazione giusto?

Grazie borgo!

P.S Se ti chiedessi anche il form per l'autenticazione chiederei troppi dici?
 
Ultima modifica:
Allora, sto facendo un po di prove e sono arrivato qui ed ho un problema.
Ricapitolando io voglio arrivare ad avere:
- Un sito che ha una sezione riservata cui deve essere accedibile solo a me con relative password e user.
- Una cartella (la sezione riservata) che contiene diverse pagine, denominata software

Allo stato attuale, la cartella è visualizzabile scrivendo www.miosito.it/SOFTWARE

allora ho creato un file, muro.php con queste caratteristiche:

Codice:
<html>
<head>
<title>CONTROLLO</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?php 
/* 
ti conviene in una pag a parte, farti un poccolo script con le seguenti due righe, lanciarlo e copiare i due risultati 
echo sha1("username che utilizzerai")."<br>"; 
echo sha1("password che utilizzerai")."<br>"; 
questo impedisce comunque di conoscere quale è l'user e la pass anche se uno riuscisse a scaricare la pagina via fpt 
*/ 

$user="d033e22ae348aeb5660fc2140aec35850c4da997"; 
$pass="5f5fef3b5e053d07eaaf1f65bb872c0b74f8b0a2"; 
if(isset($_POST['user']) && isset($_POST['pass'])){ 
    if(sha1($_POST['user'])== $user && sha1($_POST['pass'])== $pass){ 
     
	 header("location:software/index.php");
	 
    }else{ 
        header("http://www.miosito.it/"); 
        exit(); 
    } 
}
?>
<form id="accesso" method="post" action="">
<fieldset>
<legend>Login</legend>
<label for="user">username:</label>
<input name="user" class="text" value="user" type="text" id="user" />


<label for="pass">password:</label>
<input name="pass" class="text" value="pass" type="pass" id="pass" />

<input class="submit" title="invia username e password per controllo autanticita'" type="submit" name="action" value="Invia" />
</fieldset>
</form>
</body>
</html>

Il fatto è che ora quando vado a lanciare il file: muro.php mi da questo errore:
Codice:
Warning: Cannot modify header information - headers already sent by (output started at /home/mhd-01/www.miosito.it/htdocs/muro/index.php:7) in /home/mhd-01/www.miosito.it/htdocs/muro.php on line 20

Oltre questo errore comunque sia resta il fatto che se vado a scrivere www.miosito.it/software in ogni caso non mi chiede nessuna autorizzazione...

Grazie!
 
ciao
pensavo che tu volessi fare una unica pagina riservata.
comunque la pag del form schematicamente:
HTML:
<h1>loggati</h1>
<form action="controllo.php" method="post">
username: <input name="user" type="text"><br>
password: <input name="pass" type="password"><br>
<input name="log" type="submit" id="log" value="log">
</form>
poi fai la pag controllo.php (che è quella che hai postato con alcune modifiche)
PHP:
<?php 
session_start();//sessione che vedrai serve alla pag index.php e anche per altre riservate
$user="d033e22ae348aeb5660fc2140aec35850c4da997"; 
$pass="5f5fef3b5e053d07eaaf1f65bb872c0b74f8b0a2"; 
if(isset($_POST['user']) && isset($_POST['pass']){ 
    if(sha1($_POST['user'])== $user && sha1($_POST['pass'])== $pass){ 
     $_SESSION['password']=$_POST['pass'];//genero la sessione
	 header("location:software/index.php");
	 exit();//meglio un exit anche qui
    }else{ 
        header("location:nome_pag_che vuoi.php"); 
        exit(); 
    } 
}else{ 
    header("location:nome_pag_che vuoi.php"); 
    exit(); 
} 
?>
poi fai la pag index.php (con il php e/o l'html che ti serve)
PHP:
<?php
session_start();//inizializzi la sessione
if(!isset( $_SESSION['password']){//la sessione NON esite quindi vieni reindirizzato a dove vuoi tu
	//in una certa misura impedisce l'accesso diretto es con http://www.tuo_sito.it/software/index.php
	header("location:nome_pag_che vuoi.php"); 
    exit();
}
//e qui puoi mettere tutto il php che vuoi....
?>
<!-- e l'html -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<!-- eccetera, intervallato o meno da codice php -->

se le pag riservate sono più di una (tramite menu) in tutte metti
PHP:
<?php
session_start();//inizializzi la sessione
if(!isset( $_SESSION['password']){//la sessione NON esite quindi vieni reindirizzato a dove vuoi tu
	//in una certa misura impedisce l'accesso diretto es con http://www.tuo_sito.it/software/index.php
	header("location:nome_pag_che vuoi.php"); 
    exit();
}
//e qui puoi mettere tutto il php che vuoi....
?>

esistono anche sistemi più sicuri, ma tutto dipende dall'importanza

p.s.
non usare il tag CODE (va bene es per js) ma se solo html <> o PHP
 
Ottimo grazie però mi sa che ho sbagliato qualcosa.
Allora, ho rinominato il controllo.php con index.php in quanto l'altra index risiede nella cartella software quindi ho questa situazione:
PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<title>Controllo</title>
</head>
<body>

<?php  
session_start();//sessione che vedrai serve alla pag index.php e anche per altre riservate 
$user="d033e22ae348aeb5660fc2140aec35850c4da997";  
$pass="5f5fef3b5e053d07eaaf1f65bb872c0b74f8b0a2";  
if(isset($_POST['user']) && isset($_POST['pass'])){  
    if(sha1($_POST['user'])== $user && sha1($_POST['pass'])== $pass){  
     $_SESSION['password']=$_POST['pass'];//genero la sessione 
     header("location:software/index.php"); 
     exit();//meglio un exit anche qui 
    }else{  
        header("http://www.miosito.it/");  
        exit();  
    }  
}else{  
    header("http://www.miosito.it/");  
    exit();  
}  
?>

<h1>loggati</h1>
<form action="index.php" method="post">
username: <input name="user" type="text"><br>
password: <input name="pass" type="password"><br>
<input name="log" type="submit" id="log" value="log">
</form>
</body>
</html>

e sulla cartella software, nella index nel body ho messo questo codice:
PHP:
<?php 
session_start();//inizializzi la sessione 
if(!isset( $_SESSION['password']){//la sessione NON esite quindi vieni reindirizzato a dove vuoi tu 
    //in una certa misura impedisce l'accesso diretto es con http://www.tuo_sito.it/software/index.php 
    header("location:nome_pag_che vuoi.php");  
    exit(); 
} 
//e qui puoi mettere tutto il php che vuoi.... 
?>

il fatto è che quando avvio l'index del controllo mi da pagina bianca e nulla piu'..
 
ciao scusa, ma mi sono accorto di un paio di cose
sia l'istruzione session_start() che header DEVONO venire prima di QUALSIASI output html e tu hai messo in testa:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html> ecc.......
per semplificare ti conviene fare due pagine
una con il form (es. loggati.php)
e una con il controlllo controllo.php

nella pag controllo NON mettere tutto l'ambaradan
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
ma solo i tag <?php .... ?>
 
Ultima modifica:
(Scusami se sono impedito, ma sono alle prime armi)
Allora ho:

controllo.php
PHP:
<?php  
session_start();//sessione che vedrai serve alla pag index.php e anche per altre riservate 
$user="d033e22ae348aeb5660fc2140aec35850c4da997";  
$pass="5f5fef3b5e053d07eaaf1f65bb872c0b74f8b0a2";  
if(isset($_POST['user']) && isset($_POST['pass'])){  
    if(sha1($_POST['user'])== $user && sha1($_POST['pass'])== $pass){  
     $_SESSION['password']=$_POST['pass'];//genero la sessione 
     header("location:software/index.php"); 
     exit();//meglio un exit anche qui 
    }else{  
        header("http://www.sito.it/");  
        exit();  
    }  
}else{  
    header("http://www.sito.it/");  
    exit();  
}  
?>

e index.php
PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<title>Controllo</title> 
</head> 
<body> 
<h1>loggati</h1>
<form action="controllo.php" method="post">
username: <input name="user" type="text"><br>
password: <input name="pass" type="password"><br>
<input name="log" type="submit" id="log" value="log">
</form>
</body> 
</html>

Mi da qualche errore nell'index di quella software che l'ho messa all'interno della cartella software.. sicuramente ho sbagliato qualcosa quindi
 
Nella index del sw ho messo dopo il body questo codice:
PHP:
<?php 
session_start();//inizializzi la sessione 
if((!isset( $_SESSION['password'])){//la sessione NON esite quindi vieni reindirizzato a dove vuoi tu 
    //in una certa misura impedisce l'accesso diretto es con http://www.tuo_sito.it/software/index.php 
    header("location:nome_pag_che vuoi.php");  
    exit(); 
} 
//e qui puoi mettere tutto il php che vuoi.... 
?>

Non so cosa devo mettere in nome_pag_che vuoi poichè.
La struttura è:
root-->index.php e controllo.php-->software-->index.php--->cartelle e pagine php

In questo caso mi trovo nella index del sw quindi cosa dovrei mettere?
 
Scusami, che sbadato c'era anche scritto :).

Ok funziona in parte, perchè mi accede all'index del php e fa l'accesso e tutto ma se io faccio
www.miosito.it/muro
lui mi chiede l'accesso

se faccio invece
www.miosito.it/muro/software

lui mi entra direttamente sull'index senza richiesta di autenticazione

Lo schema è:

root-->muro(contiene controllo e index)-->sofware(index ed altre cartelle)

nell'index sw ho messo dopo il body:
PHP:
<?php 
session_start();//inizializzi la sessione 
if(!isset( $_SESSION['password'])){ 
    header("location:www.miosito.it");  
    exit(); 
} 
//e qui puoi mettere tutto il php che vuoi.... 
?>
 
ciao
Nella index del sw ho messo dopo il body questo codice
non dopo il body ma SEMPRE prima

PHP:
<?php 
session_start();//inizializzi la sessione 
if(!isset( $_SESSION['password'])){ 
    header("location:www.miosito.it");  
    exit(); 
} 
?> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<title>Controllo</title> 
</head> 
<body>
eccetera.........
 
Ultima modifica:
ciao
se guardi lo zip funzia.
comunque se ti logghi e poi torni alla index nella root puoi accedere alla riservata in quanto hai creto la sessione e ti sei gia loggato.
ma un pinco pallo qualsiasi se prima non si è loggato non puo accedere direttamente.
per provare quello che dico
prima ti logghi e accedi
torni alla index e provi ad accedere direttamente alla index riservata e vedi che puoi farlo.
chiudi il bw.
lo riapri (come se tu fossi un pinco pallo qualsiasi) e provi ad accedere direttamente alla riservata, vedrai che si rimandato alla home.
solo chi si è loggato e che quindi conosce user e pass (prima di chiudere il bw) può accedere anche direttamente
 

Allegati

Si infatti, ho visto prima e funziona alla grande!
Ora, se posso, ti chiedo altre due cose anche se sono semplici curiosità.
- Se dovessi in futuro gestire più user ad es 2 dov'è che dovrei modificare il codice?
- Ultimo ma non ultimo punto, io sto lavorando in php grazie a te che mi stai aiutando ma di php come vedi ne so ben poco, conosci qualche guida ben fatta molto online?

Ciao!
 
Ultima modifica:

Discussioni simili