[Php] Proteggere pagine web

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
drudo
00mercoledì 10 dicembre 2003 09:12
Dopo aver discusso su come poter scrivere, attraverso php, su un file di testo da un form html (quì ) mi chiedevo quali precauzioni in fatto di sicurezza adottare per proteggere le pagine create... password? permessi? ecc.


ciao
drudo

aessenet
00mercoledì 10 dicembre 2003 11:00
Direi password.
Se l'amministratore è uno solo e lo script è molto semplice, per fare in modo che solo lui entri è sufficiente una selezione: se la password è giusta fai qualcosa, altrimenti mostra il form per fare il "login".
<?
$pass_admin="pwd";
if($HTTP_POST_VARS["pass_proveniente_dal_form"]==$pass_admin){
// codice dello script
}
else{
// visualizza il form per fare il login
}
?>
drudo
00mercoledì 10 dicembre 2003 13:44
Permettimi... non ho capitz...

Ho creato fin d'ora quattro file:

· form.htm ---> per inviare testo a scrivi.php
· scrivi.php ---> per scrivere sul file .txt
· vedi.php ---> per vedere ciò che c'è scritto sul .txt
· evidenza.txt

Ora... dove metto il codice che mi hai scritto?
D'istinto ho creato una pagina "login.php" così fatta:

<form name="form1" method="post" action="form.htm">
<input type="text" name="passw">
<br>
<input type="submit" name="Submit" value="Invia">
</form>
<?
$pass_admin="demo";
if($HTTP_POST_VARS["passw"]==$pass_admin){
// codice dello script
}
else{
// visualizza il form per fare il login
}
?>


ma credo proprio sia scorretta [SM=x53917] ...cioè non sono sicuro che vada lì... alchè ho provato a mettere il codice che hai dato in "form.htm" trasformandolo in --> "form.php" (sennò non funge il php) , ma nulla... insomma ho un gran casino in testa [SM=x53929]


ciao
drudo


P.S. sò che dovrei studiare...
Arcano
00mercoledì 10 dicembre 2003 14:55
devifare così:

<?
$pass_admin="pwd";
if($HTTP_POST_VARS["pass_proveniente_dal_form"]==$pass_admin){
<form name="form1" method="post" action="form.htm">
<input type="text" name="passw">
<br>
<input type="submit" name="Submit" value="Invia">
</form>

}
else{
// visualizza il form per fare il login
}
?>


e al posto di questo // visualizza il form per fare il login
ci va il form per il login.
almeno credo.

[SM=x53911]

Arcano
00mercoledì 10 dicembre 2003 15:01
no ho sbagliato...mi da un errore

Parse error: parse error in c:/programmi/abria merlin/apache/htdocs/homephp/prova.php on line 10
aessenet
00mercoledì 10 dicembre 2003 21:08
Aggiungendo la protezione il nostro script inizia a diventare interessante, ma anche un po' più complesso.
Quando le cose sono difficili, conviene dividerle in piccole parti più semplici, e cercare di ragionare (in italiano) su come risolveremmo il problema.
Il nostro (unico) file php cosa dovrà fare?
Visualizzare un form per loggarsi
Controllare la correttezza dei dati inseriti dal form
Se i dati sono corretti{
effettuare alcune operazioni (form inserimento testo,scrittura file)
}
altrimenti{
darà un messaggio d'errore
}

Per semplificare le cose, potremmo riscrivere così il nostro script (ma si può fare in tanti altri modi):
se la password è corretta {
scrivi i dati nel file di testo
}
altrimenti{
mostra il form per effettuare il login.
}
In quest'ultimo esempio, il form per effettuare il login è lo stesso di quello che si usa per spedire i dati. Ci sarà quindi un campo per la password e uno per il testo, e il testo verrà scritto su file solo se la pass è corretta.
Riscrivendo ancora le cose, il nostro unico file admin.php potrebbe essere (non l'ho provato):

<?
$password_admin = "la_propria_password";
$nome_file = "file_di_testo.txt"
$testo = stripslashes( $HTTP_POST_VARS["messaggio"] );

if($HTTP_POST_VARS["passw"]==$password_admin){
$output = fopen($nome_file,"w");
fwrite($output, $testo);
fclose($output);
}
else{
echo "<form action=\"admin.php\" method=post>";
echo "<input type=password name=passw>";
echo "<textarea name=messaggio></textarea>";
echo "<input type=submit></form>";
}
?>

Il codice html del form è stato immerso nel codice php, pertanto deve rispettare la sintassi del php.
Siccome le virgolette sono usate dal php per delimitare le stringhe di testo da stampare, non possono essere usate all'interno delle stringhe: bisogna farle precedere dallo slash.

Modificato da aessenet 10/12/2003 21.09
drudo
00giovedì 11 dicembre 2003 11:23
Piccola imprecisione del prof... manca un ; alla fine di una riga... il chè non fa andare lo script :P
questa è la riga senza il ; :

$nome_file = "file_di_testo.txt"

cmq ora funge tutto... grazie molte!

Avrei però una finezza da chiederti se mi concedi la pazienza.
· si potrebbe creare un'area di testo sensibile nell'andare a capo automaticamente? Spiego meglio! Per andare a capo bisogna inserire il tag <br> poichè l'area non è sensibile all' **invio** sulla tastiera... è possibile rendere l' **invio** come fosse un <br>?

Mi sono permesso di apportare delle modifiche allo script:

<?
$password_admin = "demo";
$nome_file = "testo.txt";
$testo = stripslashes( $HTTP_POST_VARS["messaggio"] );

if($HTTP_POST_VARS["passw"]==$password_admin){
$output = fopen($nome_file,"w");
fwrite($output, $testo);
fclose($output);
echo "<font face=verdana size=2>messaggio inserito correttamente";
echo "<p><a href=\"./vedi.php\">vedi il messaggio</a></font></p>";
}
else{
echo "<form action=\"admin.php\" method=post>";
echo "<font face=verdana size=2>password<br><input type=password name=passw><br>";
echo "messaggio<br><textarea name=messaggio cols=40 rows=10></textarea><br>";
echo "<input type=submit></font></form>";
echo "<p><font face=verdana size=2>messaggio esistente:<br></p>";
echo "<table width=200 border=0><tr><td bgcolor=#CCCCCC>";
$nome_file = "testo.txt";
$fd = fopen ($nome_file, "r");
$contenuto = fread ($fd, filesize ($nome_file));
fclose ($fd);
echo $contenuto;
echo "</td></tr></table>";
}
?>



Script raggiungibile quì
Password (si vede sopra cmq): demo


ciao
drudo
Modificato da drudo 11/12/2003 11.25
Modificato da drudo 11/12/2003 11.26
Arcano
00giovedì 11 dicembre 2003 14:50
così non serve nemmeno il file scrivi.php! bravi!

cmq drudo non hai veramente niente da fare in ufficio la mattina ehehe??? [SM=x53915]

CMQ bravo davvero lo script e funzionante e completo!




Modificato da Arcano 11/12/2003 14.55
aessenet
00giovedì 11 dicembre 2003 16:20
Re:

Scritto da: drudo 11/12/2003 11.23
Piccola imprecisione del prof... manca un ; alla fine di una riga... il chè non fa andare lo script [SM=x53920]


Cos'è che dicono i professori in questi casi? Era per vedere se eravate attenti!

Per risolvere il problema del br, o ti fai una funzione tu, oppure (meglio) usi il php: c'è una funzione del php che sostituisce tutti gli a capo con un bel <br/> (quindi compatibile con xhtml).

Si chiama nl2br() (nl=new line) e la sintassi è questa

$stringa_con_br = nl2br($stringa_con_a_capo);
drudo
00giovedì 11 dicembre 2003 17:43
ehm sì ma... dove la devo mettere [SM=x53917] ??

[drudo pensiero]
per dio AS consigliami una buona, facile, rapida, terra-terra guida al PHP sto strinando a non capirci un caxxo...
[/drudo pensiero]

A naso mi verrebbe da metterla tra le prima funzioni così:

<?
$password_admin = "demo";
$nome_file = "testo.txt";
$testo = stripslashes( $HTTP_POST_VARS["messaggio"] );
$stringa_con_br = nl2br($stringa_con_a_capo);


è giusto?
certo che non capisco quello che c'è scritto tra le parentesi... cosa centra quel:
$stringa_con_a_capo ?

Non andrebbe messo:
$HTTP_POST_VARS["messaggio"] ?

ciao
drudo

P.S. scusa x le domande magari idiote...
aessenet
00giovedì 11 dicembre 2003 18:24
Se scrivi così la pover nl2br() non ha molto senso..io ho usato quei nomi di variabile per far capire; tu dovresti aggiungere

$testo = nl2br($testo);

oppure, per condensare due righe in una

$testo = stripslashes( nl2br($HTTP_POST_VARS["messaggio"]) );

A te non serve una guida al php; ti serve imparare ad usare la documentazione del php e un po' di tempo da dedicare a semplici prove.
Io ho imparato il php da solo, senza avere esperienze di programmazione, quindi il codice che scrivevo faceva schifo (ma il problema non era il php, era la programmazione).

Siccome i costrutti di base della programmazione sono uguali in tutti i linguaggi (javascript, actionscript, php, java, asp, ma anche nei fogli di stile xls.. [domani c'ho uno scritto]), ti consiglierei di studiarli un po'.
Se hai qualche domanda sulla programmazione, direi (ma va?) di aprire un nuovo topic [SM=x53911]
drudo
00giovedì 11 dicembre 2003 19:42
>>Se scrivi così la pover nl2br() non ha molto senso..io ho usato quei nomi di variabile per far capire; tu dovresti aggiungere
$testo = nl2br($testo);


Adesso ho capito [SM=x53912]

>>Se hai qualche domanda sulla programmazione, direi (ma va?) di aprire un nuovo topic

Naturalmente... e ne avrò di domande penso [SM=x53914]
Cmq direi che si potrebbero focalizzare le domande sulla modifica/espansione di questo script in modo da conoscere man mano (finche si può almeno) altre funzioni del PHP... che dici?
Si coglierebbe l'occasione per fare teoria e applicare il tutto ad un caso pratico.
Comunque provvederò a studiacchiare un po' di concetti sulla programmazione và, visto che sono proprio a Zero...

ciao
drudo
aessenet
00giovedì 11 dicembre 2003 22:02
L'idea mi piace: si impara facendo qualche cosa di utile.

Riguardo alla programmazione, cerca di capire che differenze ci sono tra le varie selezioni (if, else, switch) e i vari cicli (for, while, do..while).

Per esercitarti, fai apparire nell'html di una pagina un rettangolo (4x3) costituito dal simbolo # ripetuto tante volte (se non ti riesce apri un'altro topic che qui abbiam finito).
drudo
00giovedì 11 dicembre 2003 23:22
>>qui abbiam finito

no aspetta un attimo...
A questo punto vorrei fare una cosa più semplice (forse)... vorrei SOLO creare una sorta di log-in (solo con password mi basterebbe) per accedere ad un altra pagina...

cioè passw ok? --> vai alla pagina esempio.php!

mi verrebbe da fare:

<?
$password_admin = "demo";

if($HTTP_POST_VARS["passw"]==$password_admin){
//non so che mettere
//vorrei dire solo che se passw è giusta --> vai alla pagina esempio.php
//in pratica come si dice **vai**??
}

else{
//non so cosa mettere
//a parte che CREDO vada questo di seguito
echo "<form action=\"esempio.php\" method=post>";
echo "<input type=password name=passw>";
echo "<input type=submit></form>";
}
?>


concettualmente è giusto?


>>Per esercitarti, fai apparire nell'html di una pagina un rettangolo (4x3) costituito dal simbolo # ripetuto tante volte

ehm... mi faresti capire meglio?
magari postando una immagine di ciò che dovrebbe venir fuori? o spiegandomi meglio? (rettangolo 4x3... px? rettangolo come? una tabella di quella grandezza? ...simbolo # ...messo dove? all'interno?)


drudo

aessenet
00venerdì 12 dicembre 2003 10:07
Concettualmente è giusto e basterebbe un semplice link far andare alla pagina esempio.php.
Il problema è che con un link arrivi si alla pagina esempio.php, ma ci arrivo anche io bypassando il tuo pannello di amministrazione, poichè esempio.php non è protetta da password.

O crei un altro form, con action=esempio.php, e un campo nascosto (type=hidden) con la password, o devi usare i cookie per mantenere la password da una pagina all'altra, oppure le sessioni (con le sessioni però non ho mai provato).

Il rettangolo 3x4 che ti suggerivo dovrà essere costituito da tanti #, quindi guardando l'origine html della pagina si dovrebbe vedere qualcosa tipo
####
####
####
non andiamo offtopic!

drudo
00venerdì 12 dicembre 2003 11:32
>>Il problema è che con un link arrivi si alla pagina esempio.php, ma ci arrivo anche io bypassando il tuo pannello di amministrazione, poichè esempio.php non è protetta da password.
giusto... niente ho risolto mettendo sotto alla riga:

if($HTTP_POST_VARS["passw"]==$password_admin){

una serie di "echo" che mi ricostruisca la pagina html che voglio sia protetta.

>>non andiamo offtopic!
va bene, ma non so come intitolare il topic sul rettangolo [SM=x53918]
avrei anche fatto una prova (quì)


drudo
aessenet
00venerdì 12 dicembre 2003 19:06
Re:
Va bene dai [SM=x53911]
Anche per il rettangolo, ci siamo, a patto lo stesso codice funzioni per rettangoli di qualsiasi dimensione.
Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 21:48.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com