Newsgroup: it.comp.www.php
Titolo: XAMPP e versione php

Ho installato XAMPP ma vorrei passare dalla versione 5.3.1 di php alla 
versione 4. Come posso fare? Su 
apachefriends.org
 dice che basta configurare 
il file php-switch.bat ma io non ce l'ho!! Eppure non ho installato la 
versione lite...Ho installato la versione XAMPP 1.7.3!
ciao Sirdalud 

Il motivo del passaggio dalla ver.5 alla 4 � forse superfluo ma non ne sono 
sicuro. Il fatto � che non riesco a far funzionare in locale questo codice:
<html><body>
<?php
$form = "<form method = \"GET\" action = \"$PHP_SELF\">Nome <input 
type=\"text\" name=\"nome\" value=\"$nome\"><br>Cognome <input type=\"text\" 
name=\"cognome\" value=\"$cognome\"><br><input type=\"hidden\" 
name=\"stato\" value=\"inviato\"><input type=\"submit\" 
value=\"invia\"><input type=\"reset\"  value=\"cancella\"></form>";
$errore_nome = 0;
$errore_cognome = 0;
if ($stato != "inviato"){
echo $form;
/* le tre righe sotto servono per testare il passaggio di valori da form: 
purtroppo rimangono vuote!
echo "nome: $nome<br>";
echo "cognome: $cognome<br>";
echo "stato: $stato<br>";
*/
} else {
if (empty($nome)){
$errore_nome = 1;
echo "devi inserire il nome<br>";
}
if (empty($cognome)){
$errore_cognome = 1;
echo "devi inserire il cognome<br>";
}
if (($errore_nome) || ($errore_cognome)){
echo $form;
} else {
echo "elaborazione...<br>";
echo "Benvenuto $nome $cognome";
}
}
?>
</body></html>
Sul server del mio host funziona perfettamente, ma in locale no. Se invio il 
form senza dati mi ripropone il form senza errori. Per controriprova se 
inserisco valori nel form me lo ripropone vuoto e non solo: nome, cognome e 
stato sono vuoti, sebbene la stringa di interrogazione sia corretta e 
valorizzata.
Pu� essere che ci� dipenda dal passaggio di dati da form a script (in uesto 
caso $PHP_SELF)? Devo usare l'array $_GET? Ho provato ma non funge comunque. 
E poi perch� sul web server remoto funge ed in locale no? Il web server 
remoto sar� sicuramente configurato meglio, ma probabilmente il mio codice � 
obsoleto...
dove sta l'errore?
ciao Sirdalud

Il 08/03/10 20.57, Sirdalud ha scritto:

A parte che credo php 4 non sia pi� supportato da nessuno...
cambia le variabili con le quali accedi ai campi del form con 
$_REQUEST['nomeCampo'], tanto per iniziare.
Anceh cosi hai detto che non funziona...prova a non mettere l'action al 
form (fa un postback di default)

 form: purtroppo rimangono vuote!
Perche' lo stato � sempre inviato quando invii la form.
In ogni caso butta via tutto questo codice che � pessimo e aggiornati 
con un manuale recente di php.
Per accedere alle variabili inviate via get si usa 
$_GET['nome_variabile'], per quelle via post si usa 
$_POST['nome_variabile'].
ciao
Mauro

 form (fa un postback di default)
E' vero, infatti ho un libro abbastanza vecchiotto e adesso ne voglio 
prendere uno nuovo. Avrei pensato a questo: PHP5 & MySQL La Guida (Converse, 
Joyce Park, Clark Morgan ). Che ne pensi? E' vecchiotto anche questo, 
infatti mi pare che sia uscito nel 2005, per� tratta php5 oltre che mysql. 
Lo conosci, che ne pensi?
Comunque adesso il codice mi funziona, ho provato sia $_REQUEST['nomeCampo'] 
che $_GET['nomeCampo'] e funziona in entrambi i modi (stranamente perch� 
prima di postare qui avevo provato $_GET. Ma forse avevo sbagliato a 
scrivere qualche cosa).
ciao Sirdalud 

 Mauro
Ciao, hai ragione, avevo fatto un po' di confusione con il codice, lo avevo 
inserito nell'if sbagliato, perch� ero un po' fuso.
L'ho corretto, e adesso comunque mi funziona anche con l'array $_GET.
Per correttezza, pubblico il codice corretto(gioco di parole):
--------- INIZIO CODICE--------
<html>
<body>
<?php
$nome = $_GET['nome'];
$cognome = $_GET['cognome'];
$stato = $_GET['stato'];
$form = "<form method = \"GET\" action = \"$PHP_SELF\">Nome <input 
type=\"text\" id=\"nome\" name=\"nome\" value=\"$nome\"><br>Cognome <input 
type=\"text\"id=\"cognome\" name=\"cognome\" value=\"$cognome\"><br><input 
type=\"hidden\" name=\"stato\" value=\"inviato\"><input type=\"reset\" 
value=\"cancella\"><input type=\"submit\"  value=\"invia\"></form>";
$errore_nome = 0;
$errore_cognome = 0;
if ($stato != "inviato"){
echo "$form";
} else {
if (empty($nome)){
$errore_nome = 1;
echo "devi inserire il nome<br>";
}
if (empty($cognome)){
$errore_cognome = 1;
echo "devi inserire il cognome<br>";
}
if (($errore_nome) || ($errore_cognome)){
echo $form;
echo "nome: $nome<br>";
echo "cognome: $cognome<br>";
echo "stato: $stato<br>";
} else {
echo "elaborazione...<br>";
echo "Benvenuto $nome $cognome";
}
}
?>
</body></html>
------------FINE CODICE-------------
Anche se devo dire che ancora non funziona come deve, perch� una volta che � 
stato inviato le variabili dentro il form vengono valorizzate ed il pulsante 
reset non funziona pi�. Prover� a modificarlo ulteriormente.
PS. So che lo potrei fare pi� semplicemente con javascript (che conosco come 
linguaggio) ma adesso sto rispolverando il php e sono in fase di 
autoformazione :-)
Oppure potrei semplicemente dividere il form dallo script php di 
elaborazione, ma appunto sto facendo degli esercizietti per riscaldarmi un 
po', sono tutto arrugginito.
PPS. il libro che ho postato ion risposta a Tom pu� andare bene per 
aggiornarsi?
ciao Sirdalud

 con un manuale recente di php.
E aggiungerei: cambia hosting se ha ancora php4!
-- 
g4b0, linux user n. 369000
http://brosulo.net

 $stato = $_GET['stato'];
questo non va MAI fatto a causa della Sql Injection
http://it.wikipedia.org/wiki/SQL_injection
Detto in maniera un po' pi� divertente:
http://xkcd.com/327/
ciao
Mauro

 questo non va MAI fatto a causa della Sql Injection
Ciao, quando ho letto cosa � l'Sql Injection sono quasi saltato sulla 
seggiola! :-/ Comunque posso stare tranquillo, e cos� anche voi per me (o 
state cercando di decriptarmi per capire quale pu� essere il mio sito 
bersaglio? :-) ), perch� sto operando in locale per fare soltanto 
esercitazione. Ho capito quale pu� essere il meccanismo pericoloso del non 
controllo dei dati, ed ho letto la rassegna delle regole necessarie per 
programmare in sicurezza (almeno per scongiurare questo problema), ma voi 
quali di quegli accorgimenti adottate? Se la password � un numero potrei 
forzare il dato immesso e trasformarlo in numero, ma se la password deve 
essere una string? Cosa fate voi solitamente?
ps: carina la vignetta sul bimbo che viene chiamato con un "particolare" 
nome ed i record vengono clamorosamente distrutti...
ciao Sirdalud 

 E aggiungerei: cambia hosting se ha ancora php4!
In realt� il mio attuale hosting supporta php5, ma sto facendo esercitazione 
in locale.
ciao Sirdalud 

essere una string? Cosa fate voi solitamente?
Be', dato che nel database le stringhe non ci sono in plaintext, io di
norma faccio qualcosa come
	$sql_user = SQLEscape($_REQUEST['username']);
	$sql_pass = md5($salt . $_REQUEST['password']);
 
	SELECT * FROM users WHERE username='$sql_user'
		AND password='$sql_pass';
Leonardo
-- 
The cock doth craw, the day doth daw,
the channerin' worm doth chide:
gin we be mist oot o' oor place,
a sair pain we maun bide.

 password deve essere una string? Cosa fate voi solitamente?
Se parliamo del campo password questo non va MAI memorizzato in charo 
nel db ma sempre in md5 (o altri algoritmi non invertibili).
Inoltre per maggiore sicurezza io invio la password in md5 direttamente 
dal browser, non la faccio viaggiare in chiaro sulla rete, ma questo � 
un argomento un po' diverso.
Nel caso di normali campi di testo faccio
$nome = pg_escape_string($_GET['nome'])
poi uso $nome per fare le operazioni sul db
ciao
Mauro

 un argomento un po' diverso.
Scusami, ma per fare questo devi avere javascript sul client. E se 
l'utente lo disabilita o si collega col cellulare/playstation3/wii/ecc. 
non lo lasci loggare?
Bye.

 non lo lasci loggare?
Esatto, ma è per un sito un pò particolare in cui la sicurezza viene 
prima della possibilità di accesso via browser "non convenzionali", non 
ci sono nemmeno pagine pubbliche.
Tra l'altro faccio un md5( session_id + password ) quindi la stringa che 
viaggia in rete non è mai la stessa. Più di questo senza https non mi 
pare si possa fare.
In siti normali (purtroppo) devo accettare che in certi casi la password 
verrà spedita in chiaro.
ciao
Mauro

un argomento un po' diverso.
Cioe' mandi un challenge dal server? :-? Come funziona?
(A parte dover mettere Javascript, dico)


 Cioe' mandi un challenge dal server? :-? Come funziona?
In fase di creazione della form di login scrivo in un campo hidden il 
valore di session_id tramite php.
Ho un javascript che calcola il md5 della stringa, poi onSubmit della 
form faccio
var hash_passwd = MD5(MD5(name+passwd) + session_id);
e poi riscrivo questo nel campo password della form.
Riepilogando l'utente scrive la password quindi, poi io la sovrascrivo 
con il valore che vedi sopra e la invio in rete.
Che te ne pare? Abbastanza sicuro?
ciao
Mauro

Che te ne pare? Abbastanza sicuro?
Si', praticamente e' un protocollo molto simile all'autenticazione Digest,
con il SID che svolge il ruolo del nonce (solo che il SID e' costante).
Questo mette in sicurezza totale solo la password, naturalmente, non tutta
la connessione (senza SSL, e' possibile intercettare il SID).
Ma nei limiti dell'HTTP "normale" (stateless-ness, ecc.) mi pare il top, e
parecchio meglio del modo "classico" (ce ne fossero pochi, dei worm che si
leggono i dati inviati dai form alla caccia di password e PIN).
Chissa' se si riuscirebbe a modularizzare il tutto? :-)


 Chissa' se si riuscirebbe a modularizzare il tutto? :-)
cosa intendi per "modularizzare il tutto" ?
ciao
Mauro

>>	print FS_secureform('daForm', 'daPass');
Quella funzione butta fuori al client il Javascript, che sostituisce uno
handler onSubmit alla form daForm, ecc. ecc. .
La pagina che riceve la form dovra' anche lei avere il codice necessario
a gestire il caso che la password arrivi in chiaro (no javascript), o in
hash MD5.
A quel punto con un include e due istruzioni extra passi da HTTP-plain a
HTTP-armored :-)


 hash MD5.
Non è più semplice se nella form di invio cambi il valore della action 
della form con javascript?
<form action="plain_login.php">
poi onLoad della pagina modifichi quel valore con javascript in 
md5_login.php.
Se javascript è attivo fai login via md5, se non lo è arrivi nella 
plain_login. Tutto il resto non cambia, tanto l'evento onSubmit se 
javascript non è attivo viene ignorato.
ciao
Mauro
p.s.
Dimenticavo di farti notare l'effetto secondario di questo tipo di 
autenticazione. Non puoi salvare la password sul browser, perche' viene 
salvata quella in md5 che la volta dopo non è più valida e ad alcuni 
utenti non piace.

utenti non piace.
E io stavo per dirti che e' la parte migliore :-) (non tutti gli utenti
usano la "master password" in Firefox... e altri browser non ce l'hanno
proprio).
