Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Modifica file xml

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    99

    Modifica file xml

    Ciao, ho un problema con la modifica di un file xml.
    Non riesco a creare nodi ed elementi, in pratica non riesco a modificare nulla di quel file.
    Il file si presenta così:

    codice:
    <Account>
    <Editore>
    <record Date="15/07/2020 14:56" AccountID="casfgva5"/>
    </Editore>
    <Edition/>
    <History/>
    </Account>
    Io devo entrare in edition, creare un altro nodo e metterci dentro altri attributi.
    Quindi sto utilizzando questo codice:

    codice:
        var xhttp = new XMLHttpRequest();
        xhttp.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
                modify(this, "10/01/2021", "12");
            }
        };
        xhttp.open("GET", "Books/test.xml", true);
        xhttp.send();
    
        function modify(xml, data, v) {
            xmlDoc = xml.responseXML;
            newElement = xmlDoc.createElement("ordine");
            x = xmlDoc.getElementsByTagName("Edition")[0];
            newElement.setAttribute("Data", data); 
            newElement.setAttribute("class", v);        
            x.appendChild(newElement);            
        }
    Io credo che il codice sia corretto eppure, nella sua esecuzione il file xml non viene modificato. Ho provato anche a ciclare tutto il file per poi cercare il tag di interesse e provare ad inserirne gli elementi, ma niente. F5 sul file xml e il file non è stato modificato. Come è possibile?

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Quote Originariamente inviata da Erwin19 Visualizza il messaggio
    Io credo che il codice sia corretto eppure, nella sua esecuzione il file xml non viene modificato. Ho provato anche a ciclare tutto il file per poi cercare il tag di interesse e provare ad inserirne gli elementi, ma niente. F5 sul file xml e il file non è stato modificato. Come è possibile?
    Quando dici che "il file XML non viene modificato", ti riferisci al file originale (ovvero quel "Books/test.xml")?

    Se la risposta è affermativa, sfido che non venga modificato: tu stai di fatto scaricando il file XML dal server immagazzinandolo in memoria (per essere precisi, nella memoria del browser); successivamente, applichi le modifiche agli elementi di tuo interesse, ma stai continuando a lavorare sull'istanza del documento presente nella memoria e non sul file fisico da cui hai ottenuto i primi dati.

    I dati vengono ottenuti tramite AJAX e scaricati dal server, e potrebbero essere anche generati dinamicamente: il documento che ottieni rimane in memoria e, se proprio vuoi aggiornare il file fisico sul server, devi predisporre in qualche modo un "endpoint" (ossia un indirizzo da richiamare) a cui risponda una logica lato server che prenda il documento XML modificato in memoria (es. inviandolo tramite POST, invece che con GET) e vada a scriverlo sul file originale, o qualcosa di equivalente.

    In nessun caso, scaricando il contenuto di un file dal server, le tue modifiche si riflettono automaticamente sul file originale, e sarebbe un guaio se lo fosse!

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    99
    Perfetto! Avevo letto qualcosa di sfuggita ma non ho prestato molta attenzione a riguardo anche se qualche sospetto mi era sorto prima di scrivere qui. Tuttavia ho voluto attendere altri pareri perché non conoscendo js, probabilmente era un errore di codice tenuto conto che con richiesta POST in php, il file xml originale, lo modifico tranquillamente!

    Quindi ignorando completamente la questione "istanza", proprio perché con php questa questione non sì è mai presentata, pensavo che il problema fosse di codice. Tra l altro riflettendoci hai ragione! Se non fosse così tutti sarebbero in grado di modificare file. Ma ciò solleva una questione che desidero porti.

    Dal momento in cui la modifica dovrà essere gestita tramite post (js), il client sarà in grado di vedere la richiesta POST con relativo link e parametri. Quindi come evitare questo!? Tieni conto che sono autodidatta e js non lo conosco ancora. Probabilmente esisteranno soluzioni. Quali per esempio?

    Sei stato molto gentile, grazie!

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Quote Originariamente inviata da Erwin19 Visualizza il messaggio
    Tuttavia ho voluto attendere altri pareri perché non conoscendo js [...], probabilmente era un errore di codice tenuto conto che con richiesta POST in php, il file xml originale, lo modifico tranquillamente!
    Il funzionamento in questione non è legato nello specifico a JavaScript, ma al funzionamento del protocollo HTTP, che lavora in modalità disconnessa: quando effettui il download di una risorsa (pagina, immagine, XML, ecc.) questa viene trasferita nel browser e la connessione si chiude. Ciò che hai scaricato viene utilizzato in qualche modo nel client, ma qualsiasi altra operazione di scaricamento o di upload richiede l'invio di un nuovo comando HTTP per effettuare l'operazione.

    Quote Originariamente inviata da Erwin19 Visualizza il messaggio
    Quindi ignorando completamente la questione "istanza", proprio perché con php questa questione non sì è mai presentata, pensavo che il problema fosse di codice. Tra l altro riflettendoci hai ragione! Se non fosse così tutti sarebbero in grado di modificare file.
    PHP è un linguaggio lato server: se all'interno di una pagina PHP apri un file XML, lo stai aprendo sul server, quindi qualsiasi modifica apportata al file, come a un qualsiasi DB per allargare l'esempio, avviene ovviamente sul server, laddove i dati sono memorizzati; quando le informazioni sono invece scaricate sul client, qualsiasi modifica del dato avviene lato client (indipendentemente che le si rendano persistenti in qualche modo, sempre lato client, usando ad esempio gli storage), ma per aggiornare i dati sul server è necessario che il client invochi qualcosa sul server comunicando la modifica da fare.

    Quote Originariamente inviata da Erwin19 Visualizza il messaggio
    Dal momento in cui la modifica dovrà essere gestita tramite post (js), il client sarà in grado di vedere la richiesta POST con relativo link e parametri. Quindi come evitare questo!?
    Non è possibile. Qualsiasi operazione che il browser effettua inviando comandi al server è sempre visibile.

    Ma non capisco come questo possa costituire un problema: che si agisca tramite una interfaccia utente che alla fine pubblichi dei dati verso il server tramite una chiamata con JavaScript, o che si invii il pacchetto tramite un tool esterno che simula la stessa operazione, il discorso non dovrebbe cambiare.

    Quote Originariamente inviata da Erwin19 Visualizza il messaggio
    Probabilmente esisteranno soluzioni. Quali per esempio?
    Prima di parlare di soluzioni, occorre capire qual è il tuo problema, perché non mi è assolutamente chiaro.

    Se ci riferiamo alla verifica dei dati che vengono inviati al server per aggiornare il file XML, questo è un compito del server: esso ha la responsabilità di controllare la validità formale di tutte le informazioni che vengono inviate dai client (browser, app o altro) e poi utilizzare tali informazioni per aggiornare un DB, un file, una risorsa in cloud, ecc.

    Non ho alcuna idea di ciò che stai cercando di realizzare, quindi non saprei dire qual è la problematica che ti crea tutti questi dubbi.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    99
    Quote Originariamente inviata da alka Visualizza il messaggio
    Ma non capisco come questo possa costituire un problema: che si agisca tramite una interfaccia utente che alla fine pubblichi dei dati verso il server tramite una chiamata con JavaScript, o che si invii il pacchetto tramite un tool esterno che simula la stessa operazione, il discorso non dovrebbe cambiare.
    Ho pensato che per modificare il file xml, debba per forza passare da php che risiede su un altro server. Php non lo posso installare su quello in cui sto smanettando attualmente con js. E dunque, per far ciò, dovrò effettuare una richiesta POST in js. E fino qua mi è tutto chiaro...

    Per quanto ne so e per quanto io ne possa capire, js è in chiaro sulle pagine. Ora, per effettuare la richiesta POST, nella mia pagina dovrò inserire il link, e relativi parametri. Se io questa cosa la posso fare da un server ad un altro, ciò che mi perplime è che la può fare chiunque, semplicemente guardando il codice nella mia pagina. Prenderebbe il mio stesso codice ed effettuerebbe la stessa richiesta allo stesso indirizzo. Ed ecco qui che mi ha modificato il file. Dico bene?! Quindi come posso evitare questa cosa?

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Quote Originariamente inviata da Erwin19 Visualizza il messaggio
    Ho pensato che per modificare il file xml, debba per forza passare da php che risiede su un altro server. Php non lo posso installare su quello in cui sto smanettando attualmente con js. E dunque, per far ciò, dovrò effettuare una richiesta POST in js. E fino qua mi è tutto chiaro...
    Se non hai a disposizione una pagina lato server che gestisca le modifiche al file XML per tuo conto, l'unica cosa che puoi fare è abilitare la modifica dei file via HTTP, ossia consentire lato server che tramite HTTP POST sia possibile inviare al server un file XML aggiornato da sostituire al precedente, utilizzando il protocollo HTTP quasi come fosse simile a un FTP, in breve consentendo a qualsiasi client di aggiornare la risorsa indicando il percorso, il comando (POST) e i dati da scrivere nel file.

    Quote Originariamente inviata da Erwin19 Visualizza il messaggio
    Per quanto ne so e per quanto io ne possa capire, js è in chiaro sulle pagine.
    JavaScript è in chiaro ma può essere offuscabile, tuttavia la richiesta HTTP è visibile facilmente premendo F12 e osservando qualsiasi interazione della pagina con il server.

    Quote Originariamente inviata da Erwin19 Visualizza il messaggio
    Ora, per effettuare la richiesta POST, nella mia pagina dovrò inserire il link, e relativi parametri. Se io questa cosa la posso fare da un server ad un altro, ciò che mi perplime è che la può fare chiunque, semplicemente guardando il codice nella mia pagina.
    Il codice della pagina è irrilevante: comunque si arrivi alla richiesta POST tramite codice, quella che è visibile è appunto l'operazione di POST con l'indirizzo del file XML e i dati inviati, nel momento in cui avviene, quindi chiunque può replicarla specificando dati differenti.

    Quote Originariamente inviata da Erwin19 Visualizza il messaggio
    Prenderebbe il mio stesso codice ed effettuerebbe la stessa richiesta allo stesso indirizzo.
    Non è necessario avere il codice: basta usare cURL o un qualsivoglia altro tool per fare la stessa richiesta che si vede partire dalla pagina, mettendo l'indirizzo del file XML e i contenuti desiderati.

    Quote Originariamente inviata da Erwin19 Visualizza il messaggio
    Ed ecco qui che mi ha modificato il file. Dico bene?! Quindi come posso evitare questa cosa?
    L'unico modo per ovviare è introdurre lato server un controllo in base alle caratteristiche del server Web: ad esempio, si potrebbe sottoporre l'accesso alla risorsa a una protezione con utente e password, così che l'operazione sia fattibile da chiunque abbia le credenziali per poterlo fare.

    Stiamo esaminando uno scenario dove non è presente alcun codice di gestione della richiesta e dove è abilitato l'aggiornamento diretto di una risorsa tramite HTTP: non è che ci siano chissà quante soluzioni...
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    99
    Quote Originariamente inviata da alka Visualizza il messaggio
    Stiamo esaminando uno scenario dove non è presente alcun codice di gestione della richiesta e dove è abilitato l'aggiornamento diretto di una risorsa tramite HTTP: non è che ci siano chissà quante soluzioni...
    Effettivamente...
    Dove potrei trovare un esempio in cui possa capire come sia possibile gestire tale richiesta di gestione?
    Ho letto di utente e password... Interessante, ma come, soprattutto se la richiesta proviene da esterno?! Il server come fa a capire chi ascoltare?! Tracciando l'IP? Utente e password... Dove nasconderli e soprattutto come fai a nasconderli!? Attraverso la crittografia dei dati?? Ma per codificare, dovrai avere un metodo e quel metodo lato client, sarà in chiaro.

    Sto buttando giù pensieri eh, non metto in dubbio i tuoi consigli!

    Sono argomenti che pur googolando, io non riesco a trovare facilmente. Probabilmente mi mancano le chiavi di ricerca, o forse è giusto che certe informazioni non devono essere di facile accesso. Far capire al server chi sta gestendo varie modifiche e soprattutto chi ha l'autorità per farlo, che dire, sono cose che certamente desidero approfondire!

    Comunque sto apprezzando molto i tuoi interventi!

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Quote Originariamente inviata da Erwin19 Visualizza il messaggio
    Dove potrei trovare un esempio in cui possa capire come sia possibile gestire tale richiesta di gestione?
    Essenzialmente, questa gestione dovrà essere fatta dal server Web, quindi il tutto dipende dal server che hai a disposizione (IIS, Apache, ecc.), supponendo che tu possa configurarlo a piacimento.

    Quote Originariamente inviata da Erwin19 Visualizza il messaggio
    Ho letto di utente e password... Interessante, ma come, soprattutto se la richiesta proviene da esterno?!
    Il server come fa a capire chi ascoltare?!
    La richiesta proviene sempre dall'esterno.

    Quote Originariamente inviata da Erwin19 Visualizza il messaggio
    Tracciando l'IP?
    Dovresti censire sul server Web tutti gli indirizzi IP delle macchine su cui TU usi l'applicazione, abilitando la risorsa ad essi, escludendo quindi di fatto gli altri.

    Quote Originariamente inviata da Erwin19 Visualizza il messaggio
    Utente e password... Dove nasconderli e soprattutto come fai a nasconderli!?
    Non vanno nascosti: devi inserirli al momento in cui effettui HTTP POST nella pagina, e sarà il browser a richiederli se la risorsa è stata protetta lato server usando - ad esempio - una Basic Authentication.

    Se l'operazione viene tentata da chiunque altro, dovrà essere in possesso delle credenziali prestabilite per poter eseguire l'operazione.

    Quote Originariamente inviata da Erwin19 Visualizza il messaggio
    Attraverso la crittografia dei dati?? Ma per codificare, dovrai avere un metodo e quel metodo lato client, sarà in chiaro.
    Dimentica di memorizzare qualcosa in modo nascosto nel codice e/o nella pagina!

    Quote Originariamente inviata da Erwin19 Visualizza il messaggio
    Sono argomenti che pur googolando, io non riesco a trovare facilmente. Probabilmente mi mancano le chiavi di ricerca, o forse è giusto che certe informazioni non devono essere di facile accesso. Far capire al server chi sta gestendo varie modifiche e soprattutto chi ha l'autorità per farlo, che dire, sono cose che certamente desidero approfondire!
    A mio avviso, ti conviene rivedere l'architettura dell'applicazione che stai progettando, perché in questo modo diventa impossibile da gestire, ed eventualmente spiegare qual è la finalità di tutto questo accrocchio.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    99
    Ti ringrazio per tutti i consigli che mi hai dato... Ottimo lavoro!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.