php - codice per proteggere le pagine

  • Creatore Discussione Creatore Discussione givabres
  • Data di inizio Data di inizio

givabres

Nuovo Utente
6 Apr 2009
5
0
0
Salve a tutti...
Mi chiamo Isidoro e scrivo da Palermo...
ho un piccolo problema.
Ho creato una piccola autenticazione con php. In questa pagina non c'è uno username e l'utente inserisce una password che scelgo e gli fornisco io. Questo sono riuscito a farlo inserendo il seguente codice:
<?php

if($_POST['password'] != "miapassword")
{
header("Location: pagina_errore.html");
die;

}

header("Location: pagina_ok.html");
die;
?>

premetto che sono a conoscenza del fatto che che quanto ho scritto è quanto di meno sicuro esista sulla faccia del web e che so che con un cms o con una cartella .htaccess sarebbe tutto più sicuro. Il fatto è che io di quando scritto sopra non ne so nulla (nemmeno di php sono un esperto e nemmeno ho il tempo di andare ad approfondire...per altro quello che devo fare è una cosa assolutamente provvisoria che non contiene dati riservatissimi e cose importanti.
quello di cui ho bisogno è di un codice da mettere all'interno delle pagine dell'area associati per fare in modo che l'utente che non ha competenze particolari (gli esperti entrerebbero cmq ) non possa entrare in questa area digitando semplicemente l'indirizzo sulla barra del browser...
è possibile inserire un codice su tutte le pagine che voglio proteggere ?

sicuro di una vostra risposta e scusandomi per la lunghezza del messaggio auguro a tutti un buon lavoro...
Isidoro
 
ciao io utilizzo questo metodo (non sicurissimo)
nella pagina in cui l'utente immette la password (i in quella dove c'è il link) per accedere come prima istruzione inserisco

PHP:
<?php
if(!isset($_SESSION)){
session_start ();
}
$_SESSION['codice']="pinco pallo";
?>
cioè se passo per la pagina creo la sessione e gli do un valore
nella pagina riservata

PHP:
<?php
if(!isset($_SESSION)){
session_start();
}
@$code = $_SESSION['verifica01'];
if($code != "pinco pallo" || $code=="" ){
header("Location: http://www.nio_sito.com/index.php");
}
?>

per cui se qualcuno entra direttamente tramite url della pagina riservata, senza passare dalla pagina regolare di accesso, la sessione non assume il valore "pinco pallo" e quindi automaticamente si viene riinviati dove si vuole (io riinvio alla home o index)

p.s.
le duei istruzioni devono essere le prime, ancora prima di

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
ecc....
 
grazie

intanto ti vorrei ringraziare di cuore per la celerità della risposta...
io non ho capito dove devo porre i due codiciu che mi hai fornito...
se nel file .php o se nel file html...
 
ciao
entrambi i file devono essere php
l'istruzione in cui setti $_session, nel file in cui hai il form per inserire la password
quelle in cui verifichi $_session, in tutte (o la prima) delle pagine riservate

non puoi inserire codice php in una pagina con estensione .htm o .html e ti ricordo che per trasformare una pagina htm/html in una php, che accetta ed elabora l'eventuale codice, basta che tu cambi l'estensione (con esplora risorse) in .php
 
grazie tante....ma non mi funziona

Ciao...
e grazie per la pazienza...
purtroppo non mi funziona....
ti dico quello che ho fatto...
ho una pagina chiamata "autenticazione.php" dove ho inserito il seguente codice:

PHP:
<?php
if(!isset($_SESSION)){
session_start ();
}
$_SESSION['codice']="pinco pallo";
?> 
<html>
<head>
<title>Esempio login</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
 
<body">
<form name="form1" method="POST" action="controllopsw.php">
  <table border="0" cellspacing="0" cellpadding="0">
    <tr>
      <td>Password: </td>
      <td><input name="password" type="password" id="password"></td>
    </tr>
    <tr>
      <td colspan="2"><input name="Submit" type="submit" value="Entra"></td>
    </tr>
  </table>
</form>
</body>
</html>
poi ho creato una pagina controllopsw.php


PHP:
<?php

if($_POST['password'] != "isidoro")
{
    header("Location: pagina_errore_login.php");
    die;
	
}

header("Location: scegli_lingua.php");
die;
?>

poi ho creato ovviamente la pagina scegli_lingua.php con il codice che mi hai dato tu, ma non mi funziona lo stesso...
PHP:
<?php
if(!isset($_SESSION)){
session_start();
}
@$code = $_SESSION['verifica01'];
if($code != "pinco pallo" || $code=="" ){
header("Location: http://www.google.it");
}
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento senza titolo</title>
</head>

<body>
<p>italiano</p>
<p>inglese</p>
<p>francese</p>
<p>spagnolo</p>
<p>&nbsp; </p>
</body>

</html>

dove sto sbagliando?
praticamente inserendo la password corretta mi reinvia a www.google.it non a scegli_lingua.php.
grazie...
isidoro
 
Ultima modifica:
scusa, ma ho fatto un errore :dipser:utilizzando copia/incolla da un mio script

errato
@$code = $_SESSION['verifica01'];


correzione
@$code = $_SESSION['codice'];

il nome $SESSION da verificare deve essere lo stesso di quella settata
 
ok mi funziona...

non so come ringraziarti...
sei stato preziosissimo
grazie di cuore...
isidoro
 
ciao
allora tutto ok
lascia a te lo scoprire quale è il "buco" di tale script (come ti avevevo detto non è sicuro al 100x100)
alla prossima
 
ciao,
quale/i altro sistema proponi piu' sicuro?
grazie anticipate, ciao
Carlo
 
ciao
mi spiace, ma non sono molto esperto, per ora è l'unico metodo che sono riuscito a fare, se scopro qualcos'altro di più sicuro lo posto
 
ciao
forse ho trovato un metodo più sicuro.
1. nella pagina da cui è possibile accedere alla pagina riservata inserire sempre al primo posto

<?php
if(!isset($_SESSION)){
session_start ();
}
$_SESSION['verifica01']="927";
?>


ed al posto del classisco link tipo <a fref....>admin</a> un piccolo form come questo

HTML:
<body>
<form action="riservata.php" method="post">
<input name="costanteN" type="hidden" value="2">
<input name="admin" type="submit" id="admin" value="admin">
</form>
</body>
il maleintenzionato che richiama la pagina e visualizza il codice con visualizza html (ie) o sorgente pagina (ff) non vede comunque la parte php
e (credo) comunque non sappia come inviare il valore del campo nascosto (tramite css o altro si può rendere il pulsante di subimit più bello)

2. nella pagina riservata.php sempre al primo posto inserere queste righe di codice

PHP:
<?php
if(!isset($_SESSION)){
session_start();
}
@$code = (int)$_SESSION['verifica01'];
@$costante=(int)$_POST['costanteN'];
if($costante==""){$costante=0;}
$code=$code*$costante;
if($code != 1854){
header("Location: http://localhost:8080/corso/provaRiservata/accesso.php");
}
?>
questo è il metodo che (da autodidatta) ho pensato di adottare e lo ritengo un poco più sicuro di quello proposto prima.
si evita il "bag" a cui avevo accennato

p.s.
i valori dell input nascosti e della session possono essere variati a piacere, l'importatnte e calcolare giusta la moltiplicazione (che tra l'altro può essere sostituita da una somma o sottrazione, megglio divisione no)
 

Discussioni simili