Newsgroup: it.comp.www.php
Titolo: Il mio script non gestisce eventuali errori

Ciao a tutti
potete dare un'occhiata a questo codice?
<?PHP
#questa prima parte controlla se è stato passato un nome di database
#non controlla però se è un nome di database esistente perchè non sono 
capace di farlo
if (!isset($_GET['dbf']) || (isset($_GET['dbf']) && trim($_GET['dbf']) == 
''))
#Se Il valore del nome di database non c'è dovtrebbe uscire e asndare a 
www.pimcopallino.it
#
{header('Location: 
http://www.pincopallino.it
');
exit();}
/* Connessione e selezione del database */
#Apro la connessione al server Mysql con dati che non faranno errore perchè 
ben testati e sempre uguali
$connessione = @mysql_connect("00.000.00.00", "1234567890", "0987654321");
if ($connessione == FALSE)
#comunque in caso di errore:...............
{header('Location: 
http://www.pincopallino.it
');
exit();}
mysql_select_db("Sql144961_1");
/* Esecuzione di una query SQL a cui passo il nome del database di cui 
parlavo nella prima riga */
$query = "SELECT tipo, codice, nome, costo, memo, img FROM $dbf where tipo 
like '%$tipo%'";
#
$risultato = @mysql_query($query);
#Se la query fallisce
if ($risultato==FALSE)
{ /* Liberazione delle risorse del risultato */
mysql_free_result($risultato);
/* Chiusura della connessione */
mysql_close($connessione);
header('Location: 
http://www.pincopallino
,it');
exit();}
?>
NON c'è problema se i parametri sono passati dai miei miei menù perchè 
sicuramente validi
Ma se uno chiama manualmente la pagina e sbaglia nome di database o 
qialsiasi altra cosa si entra in un loop infinito invece di gestire l'errore
Potete aoitarmi per favore?
Grazie 

 Potete aoitarmi per favore?
Infatti c'e' un problema di sicurezza, piu' o meno volontaria e/o maliziosa
non passare il nome di nessuna tabella o db via url
Se proprio hai la necessita di implementare una cosa del genere che fa
variare un valore nella querystring, allora associa le tue tabelle (o
quant'altro) ad un id interno (ad es. numerico)
Banalmente con un array puoi associare questi id con i nomi delle tue
tabelle e a questo punto tu non fai altro che controllare se l'id č
nell'array (in_array()) e nel caso usi il valore corrispondente o
altrimenti esci in errore
e il gioco e' fatto

Scusa ma non capisco
mica passo il nome del database
passo il valoew del from e il valore del where il che č  lontanissimo a 
minare la sicurezza
Vi dispiace per favore spiegarmi meglio dopo questa mia precisazione?
Grazie 

 Grazie
l'unica cosa che posso precisare e' che quella pagina mina la sicurezza..
http://www.php-faq.org/UsingAtOperand
http://www.php-faq.org/SanitizePostGet
-- 
www.iuz-lab.info
 - 
www.php-faq.org

OK
Ma perchè il mio codice non ferma l'errore?
if (!isset($_GET['dbf']) || (isset($_GET['dbf']) && trim($_GET['dbf']) == 
''))
{header('Location: 
http://www.pincopallino.it/index.php'
);
exit();}

 if (!isset($_GET['dbf']) || (isset($_GET['dbf']) 
Perche` cortocircuita qui.
Non valuta nemmeno l'ultima espressione. Devi racchiudere la seconda e la
terza tra parentesi.
Bye,

 exit();}
Il secondo isset() è superfluo.
La condizione (!isset($_GET['dbf']) || trim($_GET['dbf']) == '')
è vera se il parametro dbf non esiste oppure è una stringa nulla
(o composta da soli spazi). Non è che la pagina a cui rimandi se
la condizione è vera (index.php) ha, a sua volta, una condizione
simile alla precedente?
Inoltre, la tua query è
 | $query = "SELECT tipo, codice, nome, costo, memo, img FROM $dbf
 | where tipo like '%$tipo%'";
in cui usi $dbf e $tipo e non $_GET['dbf'] e $_GET['tipo']. Ciò
significa che se non hai register_globals = On le variabile $dbf
e $tipo non esistono. Poiché è consigliabile impostare
register_globals = Off (o comunque scrivere il codice come se lo
fosse) nella query usa l'array $_GET. Li fai gli opportuni
controlli sul parametro `tipo`, vero?
Vedi:
http://it2.php.net/manual/en/security.globals.php
http://it.php.net/manual/en/security.database.sql-injection.php
Nel tuo primo post hai scritto:
 | #questa prima parte controlla se è stato passato un nome di database
 | #non controlla però se è un nome di database esistente perchè non sono 
 | capace di farlo
parlando di "nome di database", ma in realtà tu passi via get il
nome della tabella su cui poi esegui la query e questo non mi
sembra molto sicuro. Sarebbe meglio evitarlo e "costruire" la
query attraverso parametri più anonimi, secondo me.
-- 
Federico

Anche  se scrivo solo
if (!isset($_GET['dbf']))
{header("Location:
http://www.pablo.es
");}
fa errore lo stesso ed entra in un koop che fa delle righe sullo schermo 

Pablo ha scritto:

E cosa c'è in 
www.pablo.es
? Prova a indirizzare su una pagina
contenente solo questo:
<?php
echo 'ciao';
?>
Va sempre in loop?
-- 
Federico