informazione sulla sicurezza delle pagine

volevo approfondire una questione legata alla sicurezza di alcune pagine.

installando un CMS che lavora in php, mi permette poi di avere sul sito alcune pagine che sono visibili solo agli utenti scritti e altre invece che sono personali, ad esempio la pagina del profilo.

è possibile creare uno script che faccia in modo che quando l'utente cerca di visualizzare una determinata pagina, gli si apra quella pagina ma con i dati corrispondenti al suo id?

oppure è una cosa troppo complicata da realizzare?

xke immagino che ogni volta che si iscrive un utente nuovo, non venga creata una pagina apposta con i dati del suo profilo, ma che la pagina "base" venga riempita con i dati relativi all'utente dopo l'effettuazione del login...

inviato 6 anni fa
sinistro
X 0 X

forse mi sono espresso male.

volevo dire che mi serve richiamare una pagina php, che però venga aperta con i dati di uno specifico id.

in pratica se l'id utente è 1, apra  la pagina con i dati dell'id 1, solo di quello

risposto 6 anni fa
sinistro
X 0 X

Tutto è possibile fare.

Non ho capito se lo devi fare su un cms (per cui modificare tale applicativo) o se devi farlo te.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

volevo farlo da me però sono riuscito a trovare una mod per l'applicativo e quindi alla fine ho risolto

grazie lo stesso!

risposto 6 anni fa
sinistro
X 0 X

però volevo chiederti, per non dover riscrivere la stessa pagina infinite volte, volevo sapere se poteva funzionare una cosa cosi

<?php
$id = 1;

include 'update_capienza.php'; 
?>

apro la pagina dove viene definito l'id dell'utente.

mi richiama la pagina generale dove esegue tutto il codice.

<?php
// richiamo il file di configurazione
require 'config.php';

// richiamo lo script responsabile della connessione a MySQL
require 'connect.php';

if($_POST && isset($_GET['id']))
{
   aggiorna_record();
}
elseif(isset($_GET['id']))
{
   mostra_record();
}
else
   mostra_lista();
?>

ma questa pagina inclusa deve riuscire a leggere l'id = 1

risposto 6 anni fa
sinistro
modificato 6 anni fa
X 0 X

Il tutto dipende da come funzionano le funzioni e da cosa c'è all'interno della pagina che includi.

$_GET['id'] è ben diverso da $id.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

la prima funzione deve leggere la variabile per potersi connettere al database eseguire la query e stampare i valori relativi a quel determinato id.

poi le altre due hanno l'id definito cosi:

$id = intval($_GET['id']);

risposto 6 anni fa
sinistro
X 0 X

la pagina che includo ha quel codice che ho scritto sopra e poi le tre funzioni.

con la prima funzione intendo mostra_lista() che è la prima che viene eseguita.

e serve ke quella funzione riesca a leggere l'id definito nel file che svolge la include

risposto 6 anni fa
sinistro
X 0 X

Fa un passaggio di parametri alle funzioni. In poche parole gli passi $id, non è complicato :)

Spero che hai capito il suggerimento.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

mmm

intendi con una  $_SESSION ?

risposto 6 anni fa
sinistro
modificato 6 anni fa
X 0 X

No.

Un semplice passaggio di parametri alle funzioni, è la cosa più semplice e logica.

Fino a quando non ci dai il codice di almeno una funzione però non si può suggerire la modifica appropiata.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

 :buck:

scusa se te lo chiedo... ma come ?

questa è la funzione che viene per prima

function mostra_lista()
{

   // preparo la query
   $query = "SELECT id,nome,var,var2 FROM db_prova WHERE id = $id";

   // invio la query
   $result = mysql_query($query);

   // controllo l'esito
   if (!$result) {
      die("Errore nella query $query: " . mysql_error());
   }

   echo "
   <table border='1'>
      <tr>
         <th class='style2'>Nome</th>
         <th class='style2'>Var</th>
         <th class='style2'>Var2</th>
         <th>&nbsp;</th>
      </tr>";

   while ($row = mysql_fetch_assoc($result))
   {
      $nome = htmlspecialchars($row['nome']);
      $var= intval($row['var']);
      $var2 = intval($row['var2']);

      // preparo il link per la modifica dei dati del record
      $link = $_SERVER['PHP_SELF'] . '?id=' . $row['id'];

      echo "<tr>
            <td class='style1'>$nome</td>
            <td class='style1'>$var</td>
            <td class='style1'>$var2</td>
            <td class='style1'><a href=\"$link\">modifica</a></td>
         </tr>";
   }

   echo '</table>';

   // libero la memoria di PHP occupata dai record estratti con la SELECT
   mysql_free_result($result);

   // chiudo la connessione a MySQL
   mysql_close();
}
risposto 6 anni fa
sinistro
modificato 6 anni fa
X 0 X

Se non ci dai il codice non ti possiamo aiutare!!!

In linea di massima:

<?php
function qualcosa($id) {
    $id=$id+1;
    return $id;
}

$var=1;
echo qualcosa($var); // mi restituisce 2

La funzione che ho creato aggiunge 1 al parametro passato.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

a me serve solo ke passi l'id... perchè cambia i valori recuperati dalla query

il codice l'ho postato sopra :D

risposto 6 anni fa
sinistro
X 0 X

Modifica così, evita di dichiarare le variabili globali:

function mostra_lista($id)
{

   // preparo la query
   $query = "SELECT id,nome,var,var2 FROM db_prova WHERE id = $id";

   // invio la query
   $result = mysql_query($query);

   // controllo l'esito
   if (!$result) {
      die("Errore nella query $query: " . mysql_error());
   }

   echo "
   <table border='1'>
      <tr>
         <th class='style2'>Nome</th>
         <th class='style2'>Var</th>
         <th class='style2'>Var2</th>
         <th>&nbsp;</th>
      </tr>";

   while ($row = mysql_fetch_assoc($result))
   {
      $nome = htmlspecialchars($row['nome']);
      $var= intval($row['var']);
      $var2 = intval($row['var2']);

      // preparo il link per la modifica dei dati del record
      $link = $_SERVER['PHP_SELF'] . '?id=' . $row['id'];

      echo "<tr>
            <td class='style1'>$nome</td>
            <td class='style1'>$var</td>
            <td class='style1'>$var2</td>
            <td class='style1'><a href=\"$link\">modifica</a></td>
         </tr>";
   }

   echo '</table>';

   // libero la memoria di PHP occupata dai record estratti con la SELECT
   mysql_free_result($result);

   // chiudo la connessione a MySQL
   mysql_close();
}

La chiamata alla funzione la fai con "mostra_lista($id)" (il $id è da sostituire con la variabile che contiene l'id, come ti ho fatto vedere nel mio esempio.

P.S. se hai già ricevuto risposta evita di modificare il tuo messaggio.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

ops scusa

cmq alla fine basta ke inserisco ($id) alle funzioni...

pensavo fosse più complicato, mi sa ke sono un po fuso  O0

risposto 6 anni fa
sinistro
X 0 X

ah ancora una cosa...

io creo la pagina per ogni utente. questa richiama la pagina generale che legge l'id e permette di visualizzare solo i dati relativi a quell'id associato.

però se questa pagina generale ha dentro dei link, come faccio per rendere anche i link generali, cioè che rimandino alla pagina giusta in base all'id dell'utente?

faccio un esempio.

utente marco, id = 1.

carico la mia pagina profilo_marco. la pagina profilo marco definisce che il mio id è 1. a questo punto richiama la pagina profilo_generica, che fa tutto quello che deve fare.

però a un certo punto la pagina profilo_generica contiene un link a una pagina che è dati_marco.

come posso fare che quel link sia dati_marco se e solo se l'id è 1 e ad esempio dati_andrea se l'id è 2?

grazie poi prometto ke nn ti scoccio +!!!!

risposto 6 anni fa
sinistro
X 0 X

Fai un if sulla visualizzazione del link.

Puoi aggiungere un campo nella tabella del database dei tui utente in cui definisci se visualizzare o meno certe caratteristiche del tuo applicativo (il link appunto).

Quando crei la tua pagina inserisci un if che controlla se può essere o meno visualizzato il link a seconda di cosa è specificato nel db.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

e però facendo cosi non dovrei creare un if per ogni utente e per ogni link?

risposto 6 anni fa
sinistro
X 0 X

stavo vedendo degli esempi...

non è possibile fare una cosa del genere:

www.dominio.it/pagina.php?nome=marco (oppure) id=1

???

non sarebbe piu comodo rispetto a una serie molto numerosa di if?

risposto 6 anni fa
sinistro
X 0 X
e però facendo cosi non dovrei creare un if per ogni utente e per ogni link?

No...non capisco dove sta il problema.

Tu l'id dell'utente lo passerai in qualche modo o sbaglio? Hai citato l'array $_GET.

non sarebbe piu comodo rispetto a una serie molto numerosa di if?

Aspetta...qui entra in gioco l'intera struttura della tua applicazione...devi renderla più automatizzata possibile.

Credo tu stia seguendo un filo logico scorretto.

risposto 6 anni fa
Mario Santagiuliana
modificato 6 anni fa
X 0 X

intendevo dire che ogni volta che ci sarebbe un nuovo utente dovrebbe essere creata una nuova if ... o no?

risposto 6 anni fa
sinistro
X 0 X

No perchè?

Scusa se tu metti un parametro nel database che indica se far vedere o meno una cosa...

Mica devi ricreare ogni volta un if...se no che senso ha la programmazione?

risposto 6 anni fa
Mario Santagiuliana
X 0 X

ma invece un codice del genere non funzionerebbe?

<?php

$link = index;
$ext  = htm;

echo"
<p>
<span><a href='http://dominio.it/$link.$ext'>link:</a></span>
</p>
";

?>
risposto 6 anni fa
sinistro
modificato 6 anni fa
X 0 X

Tutto può funzionare.

Il punto è decidere come far funzionare la cosa e quanto automatizzata deve essere.

Definire delle variabili per ogni singolo utente all'interno dello script è sicuramente la scelta peggiore per quanto riguarda la flessibilità.

risposto 6 anni fa
Mario Santagiuliana
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda