- Home
- Categorie
- Coding e Sistemistica
- Coding
- Consiglio su come fare un controllo..
-
Consiglio su come fare un controllo..
Salve ragazzi...
Purtroppo ho notato una grave falla su un mio script creato per la lettura dei messaggi...[php]
<body>
<?
//Apro la sessione e...
session_start();
//verifico che dopo il login io abbia la chiave di sessione ad 1
if($_SESSION['logged']==1){
//se si...
//verifico se esiste la variabile id
if(isset($_GET['id']) OR $_GET['id'] != ""){
$id=$_GET['id'];
}//mi connetto al datase
$link = mysql_connect("$db_host", "$db_database", "$db_username", "$db_password") or die("Errore connessione: ". mysql_error());
//seleziono il database
mysql_select_db('my_italiawebchat') or die("Errore apertura database: " . mysql_error());$sql="SELECT id,nome_inviante,nome_ricevente,messaggio,date,datamessaggio,oramessaggio,emailinviante FROM messaggi WHERE id='".$id."' ORDER BY date";
$query=@mysql_query($sql) or die (mysql_error());while ($array=mysql_fetch_array($query))
{
echo "Messaggio da :".$array['nome_inviante']."</a><br><br> Ricevuto ".$array['datamessaggio']." alle ore ".$array['oramessaggio']."<br />
<br><img class="barradivisione88" src="pulsantinoinvia.png"><br><br> ".$array['messaggio']." ";$iddaeliminare=$array['id'];
echo"
<br><br><br><br><br><br><a target="contenuto" href="inviamessaggio.php?destinatario=".$array['nome_inviante']."&email=".$array['emailinviante']."" class="nolinea"">Rispondi al messaggio</a><form method="post" action="eliminamess.php">
<input type="hidden" size="1" name="iddaeliminare" value="$iddaeliminare" /><br>
<input type="submit" value="Elimina messaggio"></form>
";}
[/php]Il link che compone questa pagina è cosi'
letturaposta.php?id=4
e qui sorge la falla...se io modifico nella barra degli indirizzi id=4 con id=5 o id=6 ect...
leggo i messaggi relativi a quell id anche se non fanno parte della mia posta in arrivo....
Io dovrei fare in modo di poter leggere solo i messaggi che fanno parte della mia posta in arrivo...quindi se per esempio id=5 e un messaggio che la riguarda la posta in arrivo di nicola io non devo poterlo leggere....come faccio a fare questo controllo..?
-
A questo punto ti rivolgo un'altra domanda. Come fai ad accedere nella tua, chiamamola così, casella dei messaggi?
L'unica soluzione, che non ti porterà a poter leggere altri messaggi, è usare le sessioni. Naturalmente facendo prima loggare l'utente ed aggiungendo un campo, riferito all'id utente collegato, nella tabella dei messaggi.Se il discorso non è chiaro dovresti capire come funzionano le sessioni.
Cmq fammi sapereCIAO
-
Ciao Carlitos1982,
Modifica la query da:
[php]WHERE id='".$id."'[/php]
in:
[php]WHERE id='$id' AND nome_ricevente = '$mionick'[/php]
-
@Thedarkita said:
Ho fatto cosi'...e funziona:)
Se modifico l id nella barra degli indirizzi e inserisco l id di un messaggio che risulta non mi appartenere mi mostra pagina bianca..:)
Come sicurezza questo metodo credo sia al quanto sicuro si..?
-
Più sicuro di cosi non si può.
Comunque su $id dovresti verificare che sia numerico.
-
[PHP]
$array['id']=is_numeric($array['id']);[/PHP]cosi'..?
-
Il controllo devi farlo sull'input, altrimenti non ha alcuna utilità:
[php]
if(isset($_GET['id']))
if(is_numeric($_GET['id']))
$id=$_GET['id'];
else
{
header('Location: index.php');
exit;
}
[/php]Se non è numerico fai un redirect ad un altra pagina.Evita di utilizzare:
[php]
if(isset($_GET['id']) OR $_GET['id'] != "")
[/php]In quanto il secondo controllo è inutile.