Visualizzazione risultati 1 fino 10 di 10

Discussione: nascondere il valore di un input

  1. #1
    Guest

    Predefinito nascondere il valore di un input

    Salve,
    nel codice php ho un while, che mi genera una riga per ogni valore trovato nella tabella.
    Ad ogni riga mi mette anche un pulsante per cancellare l'utente.
    Io l'ho fatto così:
    <input type='submit' name='cancella' value='ID dell'utente'>
    Quando premo il bottone quindi mi prende il suo valore e cancella l'utente che corrisponde a quell'id.
    Ho notato però che se modifichi il value del pulsante dall'html del browser, ti cancella l'utente corrispondete all'id che hai messo dal browser...
    Come potrei fare quindi a dargli un valore fisso, che non si possa modificare dal browser?
    Ultima modifica di competenzepertutti : 12-07-2015 alle ore 21.39.12

  2. #2
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Devi fare sempre adeguati controlli lato server, non ti devi mai fidare di quello che arriva dall'esterno, che può sempre essere creato appositamente per danneggiare il tuo sito. Assicurati anche che i tuoi script non siano vulnerabili ad attacchi di tipo SQL Injection.

  3. #3
    Guest

    Predefinito

    Quindi il valore lo lascio all'html ma poi devo fare tutti i controlli php per vedere se è stato cambiato?

  4. #4
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Sì: è necessario verificare sempre i dati che provengono dall'esterno.
    Non devi comunque controllare se è stato cambiato, ma solamente se quell'operazione è permessa.

  5. #5
    Guest

    Predefinito

    Ok!
    Grazie

  6. #6
    Guest

    Predefinito

    Si innanzi tutto devi permettere la cancellazione solamente a determinati profili tipo amministratori, però se inserisci solo l'ID più di tanto non fai ti serve un altro campo, il mio form di cancellazione utente è permesso agli amministratori, ogni username è univoco non ci possono essere due utenti con lo stesso nome nella tabella utenti, quando un amministratore vuole eliminare un utente deve inserire utente e password dell'utente e profilo dell'utente, l'utente deve essere uguale e la pass la si confronta leggendola prima dal DB e poi testando se quella inserita nell'input è uguale a quella sul DB, nel DB le password sono tutte in MD5.
    Quindi o hai accesso al DB e cancelli le utente dal DB direttamente o devi inserire utente e password...Se metti solo l'id uno ti può fare un attacco...Si il cancella utente nella riga della tabella è un pò da riguardare, toglierei quella funzionalità... ;)

    In effetti il tuo post però mi ha fatto notare una cosa, il tuo esempio vale anche per la cancellazione delle semplici righe nella tabella, esempio io ho un progetto dove ogni utente visualizza le sue righe per esempio nella tabella LAVORI EFFETTUATI, quando clicca il pulsante mostra tabella vede solo le sue righe dei LAVORI EFFETTUATI mentre l'amministratore le vede tutte, adesso qual'è il problema che la funzione di elimina righe lavora sull'iD però un malintenzionato utente anche se non vede l'icona della cancellazione delle altre righe degli altri utenti può inserire un ID a caso nell'html e cancella la riga...Quindi che si fa?
    Si controlla prima di cancellare le righe che gli altri campi ralativi a quell'ID siano effettivamente quelli della tabella, in poche parole ogni campo della tabella va in hidden e inviato al PHP in hidden, la funzione cancella passando l'id ma prima controlla che tutti i campi in hidden siano gli stessi di quelli che sono nella tabella, quindi un malintenzionato che vuole cancellare una riga che non vede non solo deve inserire l'id ma deve anche inserire in hidden tutti i campi di quel record li, deve sapere di ogni record come sono valorizzati i campi...Ci vuole un pò di lavoro per la sicurezza effettivamente però sono cose che devi fare se vuoi essere sicuro...
    Ultima modifica di fractalcosmo : 13-07-2015 alle ore 21.09.43

  7. #7
    Guest

    Predefinito

    È vero, buona idea :)

  8. #8
    Guest

    Predefinito

    Se no puoi fare anche un'altra cosa con meno giri, quell'id di quella riga sarà associato ad un campo di session quindi recuperi la session e prima di cancellare controlli che la session attiva sia effettivamente quella che mostra quell'ID, se la session attiva ha una corrispondenza con quella riga permetti la cancellazione altrimento no...Certo non ti tutela alla basa cioè se uno fa attacchi di forza bruta prima del login, quello devi controllarlo prima e bloccare l'accesso dopo un tot di tentativi...Ciao

  9. #9
    Guest

    Predefinito

    Se ti può interessare io ho risolto così....Nell'html mostro una tabella con le righe relative solamente di quell'utente per ogni riga ci sono due icone una di modifica ed una di eliminazione riga dalla tabella, per evitare che un utente inserisca un ID nell'html e quindi forzi la cancellazione di una riga di un altro utente ho fatto così...leggi i commenti, se leggi il codice capisci, ho usato la session.


    Codice PHP:


    public function EliminaRiga(){
    //mostriamo tutti gli errori warning notice etc...
    error_reporting(E_ALL);

    //apre la session in sicurezza
    security_session();
    //controlla che l'utente sia loggato perchè elimina riga è un metodo
    check_login();

    //Apriamo il Db phpMyAdmin
    $db = new connessione();
    $db = $db->apriConnessione();

    //recupero l'id dell'utente ed il profilo dell'utente
    $datiutente = $_SESSION["datiUtente"];
    $idUtente = $datiutente['idUtente'];
    $profilo = $datiutente['profilo'];
    //questo è l'id che prendo dall'html da Ajax...
    $rowid = $_POST['rowid'];

    //Preveniamo che un utente malintenzionato cancelli una riga forzando un ID nell'html se è sviluppatore
    if ($profilo == "sviluppatore"){

    //faccio la select dell'id utente relativa a quell'id riga che sta cercando di cancellare
    $selectFromLog = $db->prepare("SELECT User_id FROM log WHERE rowid = ?");
    $selectFromLog->bind_param('i', $rowid);
    $selectFromLog->execute();
    $result = $selectFromLog->bind_result($user_id);

    while (
    $selectFromLog -> fetch()){
    //devo riaprire la connessione altrimenti non posso fare select nella fetch
    $db = new connessione();
    $db = $db->apriConnessione();

    //se l'id utente recuperato in bind result cioè corrispettivo dell'id riga è uguale all'id di sessione utente loggato
    if ($user_id == $idUtente){
    //permetto la cancellazione
    $queryEliminaRiga = $db->prepare("DELETE FROM log WHERE rowid = ?");
    $queryEliminaRiga->bind_param('i', $rowid);
    $queryEliminaRiga->execute();

    echo (
    "OK");
    //Chiude Mysql DB
    $db->close();
    exit;
    }
    else{
    //KO è cross scripting
    echo ("KO");
    exit;
    }
    }
    }
    //se è amministratore può cancellare qualsiasi record di quella tabella.
    if ($profilo == "amministratore"){
    $queryEliminaRiga = $db->prepare("DELETE FROM log WHERE rowid = ?");
    $queryEliminaRiga->bind_param('i', $rowid);
    $queryEliminaRiga->execute();

    echo (
    "OK");
    //Chiude Mysql DB
    $db->close();
    exit;
    }
    }
    Ultima modifica di fractalcosmo : 13-07-2015 alle ore 23.16.08

  10. #10
    Guest

    Predefinito

    Ah tu hai fatto che ogni utente possa cancellare il suo post, e mi hai fatto un buon esempio...
    Io quando ho scritto di cancellare l'utente che ha quell'id stavo facendo un esempio :P colpa mia.
    Ciò che volevo fare in realtà è:
    Un gruppo di persone con 1 leader. Il leader può cacciare tutti ma appunto il problema era che tramite l'html può cacciare anche chi non è del suo gruppo.
    Allora ho fatto che prima di cacciare controlli se quell'id è nel suo gruppo, quindi cambiando id può cacciare solo gli id nel suo gruppo, che in pratica è ciò che gia può fare...idea che mi è venuta col primo mesaggio che mi hai scritto :)
    Grazie comunque, l'ultimo esempio mi potrà servire per il forum che stavo facendo!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •