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

    Array di Stringhe al server via Ajax: come avere un Joiner univoco?

    Sono curioso di sapere da voi, da chi vorrà rispondere, come avete risolto voi il seguente problema:

    1) array javascript, array di stringhe, da inviare al server, via ajax.
    La array si deve necessariamente trasformare in stringa unica, per cui si usa join.
    A questo punto sorgono due problemi, che sono quelli riguardo ai quali vorrei conoscere le vostre soluzioni:

    2) Il joiner usato in join ovviamente non deve essere presente nelle stringhe concatenate.
    Una prima soluzione è quella di impedire che l'utente utilizzi il joiner prescelto. Ma a parte che, per quanto lo si scelga bizzarro e inconsueto, è comunque concettualmente poco elegante eliminare una opzione di testo all' utente (qualsiasi essa sia), ma poi vi è sempre il rischio di una qualche injection.

    3) Prima di effettuare il join si effettua anche una misura della length delle stringhe da concatenare, e si invia al server sia il join delle stringhe concatenate sia una mappa numerica di dove stanno gli indici dei vari joiner.
    Si potrebbe pensare che questo risolve il problema, invece no: se l'utente immette caratteri insoliti (potrebbero essere alfabeti asiatici, che sono insoliti per noi ma non per un network multimediale e internazionale ad esempio), è al momento della rielaborazione sul server che (encodeURIcomponent a parte, che non risolve il problema) ci si accorge che quel che appariva come un singolo carattere, è in realtà letto come una seuqenza di più caratteri - il che manda a zampette all' aria tutta la mappatura.

    Voi come avete risolto?

  2. #2
    Oh, per capire cosa intendo:

    codice:
    <?php
    print strlen('暴れる'); //9
    print '
    '.strlen(htmlentities('暴れる')); //35
    print '
    '.strlen(html_entity_decode('暴れる')); //9
    print '
    '.strlen(htmlspecialchars_decode(htmlentities('暴れる'))); //35
    print '
    '.strlen(html_entity_decode(htmlentities('暴れる'))); //9
    ?>
    
    <script>
    alert(
    '暴れる'.length
    ); //3
    
    alert(
    encodeURIComponent('暴れる').length
    ); //27
    </script>
    fico eh...... ?

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660

    Re: Array di Stringhe al server via Ajax: come avere un Joiner univoco?

    2) Il joiner usato in join ovviamente non deve essere presente nelle stringhe concatenate.
    Una prima soluzione è quella di impedire che l'utente utilizzi il joiner prescelto. Ma a parte che, per quanto lo si scelga bizzarro e inconsueto, è comunque concettualmente poco elegante eliminare una opzione di testo all' utente (qualsiasi essa sia), ma poi vi è sempre il rischio di una qualche injection.

    Voi come avete risolto?
    Questo è il metodo che di solito uso, il fatto di impedire agli utenti di inserire un carattere particolare sinceramente non lo vedo come grosso problema... anzi di solito impedisco di inserire anche altri caratteri particolari che potrebbero permettere all'utente maligno di bypassare i controlli sulla validità dei campi cercando di proteggermi appunto ad un possibile attacco con la tecnica injection. Se nel db vengono salvati dati sensibili ed è quindi di vitale importanza proteggersi da possibili attacchi di hacker il concetto di metodo poco elegante credo vada a farsi benedire... o almeno questa è la mia opinione.

  4. #4
    si hai ragione, si ricade per forza sul punto 2. E' quello che alla fine ci tocca usare.
    Tuttavia mi chiedevo se appunto qualcuno ha idee più eleganti di quella che io e te adottiamo. Tu capisci che concettualmente ci vorrebbe qualcosa che ci permettesse di prescindere del tutto dalla inibizione di un carattere arbitrario da noi scelto.

    E' un po' paradossale che questo problema non abbia trovato applicativi noti (o almeno a me noti!) che permettano di inviare ad un server una array (un data type direi un tantinello importante...!) preservandone la struttura a prescindere da tatticismi come il joiner arbitrario (che poi lo escludi via javascript, ma una volta sul server alla fine ti tocca fare questo: contare i joiner e se sono maggiori della lunghezza della array inviata, dedurne che forse c'è una injection; insomma, il controllo che abbiamo sulle array via ajax è, fondamentalmente, nullo).

    Inoltre il punto 3 è per me poco comprensibile - un mio limite indubbiamente, ma come è possibile che oltre a questo problema, non disponiamo di applicativi noti (almeno a me, ancora una volta) che ci permettano di dedurre una lunghezza univoca e per il server e per il client delle stringhe di testo che contengano caratteri che non siano ascii?

    mah! magari qualcuno ne sa più di me. Anche una ricerca su internet produce poco. So solo che pare che in Java sia possibile, ma: e se il tuo server non sta usando Java, che famo?

  5. #5
    io in questi casi uso, per il join, il carattere "\f" (ascii FormFeed).
    Non mi ha dato mai problemi e non impedisce la digitazione di qualsiasi carattere.
    Con la tastiera la vedo dura inserirlo!

    HTH
    Zappa
    [PC:Presario 2515EU][Cpu:P4@2.3GHz][Ram: 512M][HDU:80G@5400 RPM]
    [Wireless:LinkSys][OS: Ubuntu 9.04 - Jaunty Jackalope]

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.