Domanda

Ho alcune forme HTML e sto implementando il filtraggio di questi campi sul lato server (usando Java Servlets) e mi chiedevo cosa avrei dovuto permettere, o forse cosa dovrei non consentire. Per gli indirizzi e-mail rimuovo tutto ciò che corrisponda a questo:

[^A-Za-z0-9._%-@]

Quali sono alcune regole simili che potrei applicare per nome, messaggio e campi di numero di telefono.

Suppongo che <e> debba essere sfuggito a <e>, cos'altro dovrei sostituire?

Lungo queste linee, ci sono raccomandazioni per la lunghezza massima consentita per tali campi?

È stato utile?

Soluzione

Devi fuggire & a &amp; prima poi < a &lt;. Contrariamente alla credenza popolare, lo è non necessario scappare > a &gt;. Non è necessario proteggere la staffa chiude un tag HTML se non c'è modo di farlo aprire uno.

La tua chiamata sul fatto che debba essere sfuggito prima di essere scritto nel database o se si dovrebbe farlo mentre viene letto ogni volta dal database. Farlo sul lato di input sarà più veloce; Farlo sul lato dell'output sarà più sicuro e semplificerà anche i dati di scambiarsi con altre app se non devi sempre UNSCAPE roba prima di inviarlo a un'altra app. Personalmente pagherei il prezzo di performance e un Escape sul lato dell'output. La memorizzazione nella cache può aiutare.

Il resto della convalida che vorrai fare dipende dal tipo di dati. Per un indirizzo e-mail, controlla per assicurarsi che abbia un @ E almeno uno . Successivamente, quindi, se ti interessa se è valido o meno, invia l'indirizzo un'e-mail di test. È quasi impossibile convalidare completamente un indirizzo e-mail molto più lontano, e anche se l'indirizzo è sintatticamente valido, ciò non significa che possa essere consegnato. Allo stesso modo, consenti quasi qualsiasi cosa come URL e poi prova a recuperarlo per vedere se è valido. Per un indirizzo di fatturazione/spedizione, utilizzare il servizio Web USPS per convalidare e ottenere i dati nel miglior formato (per gli indirizzi statunitensi).

Altri suggerimenti

Dovresti consentire qualsiasi cosa per i nomi. Considera "O'Malley" o "Hudson-Walker". Alcune lingue (come Salish) includono numeri in modo da poter avere "sqwxwu7mish". Poi ci sono personaggi accentati, ebraico, cirillico, greco, cinese, coreano e persino il musicista precedentemente noto come Prince.

Il testo del messaggio dovrebbe essere allo stesso modo non vincolato. Se i messaggi possono contenere HTML, dovrai analizzare l'HTML (con un vero parser HTML) e applicare tag e attributi whitelist per consentire alle cose solo che ti aspetti.

Anche i numeri di telefono dovrebbero essere abbastanza vicini al modulo gratuito. I formati nordamericani sono diversi da quelli europei, ad alcune persone piace dire "(555) 555-5555" mentre altri amano "555-555-5555", alcuni numeri di telefono hanno estensioni e alcuni no.

L'unica codifica di cui dovresti preoccuparti sull'input è che tutto è in UTF-8 (incluso il tuo database). E, quando parli con il tuo database, non provare a codificare nulla da solo, usa il meccanismo di quotazione del driver del database e i segnaposto.

Le lunghezze dovrebbero essere generalmente molto più grandi di quanto pensi che dovrebbero così raddoppiare (almeno) la tua prima ipotesi a un ragionevole massimo. La differenza di archiviazione tra 20 caratteri per un nome e 100 non sarà importante per la maggior parte delle applicazioni, quindi sii generoso.

Non dovresti preoccuparti della codifica HTML fino all'output e quindi dovresti usare qualsiasi strumento di codifica HTML e URL che il tuo ambiente supporta, non provare a costruirne uno tuo.

Non vincere eccessivamente i tuoi input, essere il più sciolto e perdonato possibile. Sii molto severo con i tuoi risultati però.

Lunghezza massima: applico sempre una lunghezza massima sui miei campi sul lato client e sul lato server. I valori corrispondono ai valori massimi impostati nel database.

Sono d'accordo con la fuga <,> e>, <.

Penso che sia una buona abitudine avere un'ottima validazione. Se stavo lavorando con i campi di nome, messaggio e numero di telefono, farei quanto segue.

Per ogni casella di testo fai in modo che la casella di testo non prenda affatto i valori non validi.
Nome: Aa -zz
Messaggio: "Aa -zz" "0-9". " '', ''; ' eccetera..
Numero di telefono: "0-9" Non consentire spazio ma consentire "-" È sempre possibile analizzare il lato server delle stringhe.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top