Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [sicurezza] come cancellare un record di db

    carissimi,
    ho un problemino: in una pagina php mi compaiono i risultati di una query di mysql. Ogni record deve poter essere cancellato. La questione è:
    Devo far si che l'operazione sia sicura. E cioè che non si possano cancellare altri dati oltre ad il record selezionato.
    Tanto per cominciare ho pensato di mandare i messaggi con il metodo post via un campo hidden... l'unica cosa è che chiuncque potrebbe indirizzare una pagina con parametri alterati alla pagina di destianzione. Potrei anche fare un controllo sulla forma dei dati per evitare che vengano cancellati tutti i dati. Però mi resta il problema di far cancellare uno alla volta dati di record diversi. (Mi spiego: posso controllare che il post non sia ' OR id!=' ma non posso distingure se vale 1,2 o 3...
    Grazie del tempo e scusate la lunghezza del messaggio.

  2. #2
    Nel DELETE dopo la condizione WHERE puoi usare LIMIT 1.
    codice:
    DELETE FROM tabella
    WHERE id = '$id'
    LIMIT 1

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it L'avatar di thepooh
    Registrato dal
    Oct 2005
    Messaggi
    203
    Scusa piero.mac non vorrei mai contraddirti, ma credo che una fase delicata come una delete di un record abbia bisogno di una certezza!
    In tutte le tabelle che creo inserisco un id e in cancellazione vado ad inserire nella where l'id del record in questione.
    E' l'unico dato certo per andar contro rinfresci di pagina, richiami di pagina o situazioni "strane" non preventivate su carta, quando nel where hai dei delle condizioni che si possono avverare per più di un record es:
    where campo x=k, campo y=j e campo w=q è vero che all'interno del db ci sarà solo un record con quelle caratteristiche, ma se per qualche motivo uno dei campi è settato diversamente o nullo potrebbero cambiare le carte in tavola!
    Mentre se dai solo ed esclusivamente una condizione certa male che vada è sbagliata o stata già eseguita e quindi non si riesce a fare la cancellazione di record in realtà utili.
    ciao

  4. #4
    Sinceramente ho capito poco. Un id e' univoco o c'e' oppure non c'e' e con questo pace ai refresh ed ai record univoci. Il problema di jungle mi pare fosse nel timore di cancellare piu' di un record a causa di inserimenti maliziosi.
    codice:
    DELETE FROM tabella
    WHERE id = '$id' OR 1 
    LIMIT 1
    Va da se che lui deve eseguire un controllo sull'input ricevuto. Semplicemente ho messo una query che permette di cancellare un solo record per volta a prescindere da tutte le condizioni volute o imposte da maliziose injections. Che e' poi il suggerimento che ha chiesto jungle. Questo e' quanto ho capito e a cui ho risposto. Nulla piu'.



    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it L'avatar di thepooh
    Registrato dal
    Oct 2005
    Messaggi
    203
    temevo una discussione del genere e non volevo andare contro una persona come te che che ne aiuta tanti in difficoltà.
    Il mio intervento intendeva far capire che quando si va a cancellare bisogna andare per chiave certa e questo lo si pùo fare solo con l'id della tavola.
    Basta dire
    codice:
    DELETE FROM tabella
    WHERE id = '$id'
    verrà fatta solo ed esclusivamente una cancellazione sul db o meglio quella che a te interessa.
    Il
    codice:
    limit 1
    è assolutamente superfluo e fonte di errore.

  6. #6
    Sono opinioni e non c'e' nulla da discutere sulla condizione where. Quando ti fermi con l'auto metti una marcia e tiri il freno a mano. Per sicurezza.

    Per esempio quando testo le query e le tabelle metto "sempre" LIMIT 1 perche' troppe volte in precedenza mi ero fumato tabelle intere per errore o distrazione, o anche per verificare se un tipo di cancellazione funziona senza dover riscrivere tutta la tabella.

    LIMIT 1 non e' una chiave di ricerca, manco una condizione di ricerca, e' solo un limite di quantita'. Il fatto di usarla o meno fa parte della propria esperienza tra l'altro non ha alcun costo operativo se di record ce ne uno solo.

    Ripeto ... e' una risposta al quesito di jungle e non una pretesa di modum operandi. Infatti jungle ipotizza pure un id != $id e richiede esplicitamente come fare per limitare ad uno i record da cancellare.

    Tutto qui. Quando il record da cancellare deve essere uno solo ... io lo metto. Tiro il freno a mano.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.