2012-12-24 9 views
10

Vorrei consentire all'utente di eseguire calcoli semplici negli input di testo, in modo che digitando 2 * 5 si ottenga 10. Ricollego tutto tranne le cifre con una stringa vuota e quindi eseguo il calcolo utilizzando eval(). Questo sembra più facile e probabilmente più veloce quindi analizzarlo manualmente.Sta usando javascript eval() sicuro per calcoli semplici in input?

Spesso si dice che eval() non è sicuro, quindi mi piacerebbe sapere se c'è qualche pericolo o inconveniente di usarlo in questa situazione.

function (input) { 
    value = input.value.replace(/[^-\d/*+.]/g, ''); 
    input.value=eval(value); 
} 
+5

'var value' * sigh * – katspaugh

+2

E poi farai chiedere alla gente perché i risultati di' 2 + 2e-3' '1' invece di' 2.002'. Avvisa le persone dell'input non valido, non buttarlo via silenziosamente. E provare/prendere la valutazione, in modo da poter dire all'utente se non è riuscito. – DCoder

risposta

7

che è sicuro, non perché si sta sanificazione, ma perché è tutto inserito dall'utente ed eseguire nel proprio browser. Se volevano davvero inserire un codice malevolo, potevano farlo comunque usando firebug o web inspector, o anche usando un bookmarklet. Per fortuna, non c'è molto che tu possa fare malintenzionalmente con javascript tranne bloccare il tuo browser :)

1

questo è sicuro perché si sta eseguendo la convalida dell'input prima di metterlo in valutazione.

oltre si dovrebbe anche aggiungere:

()%

+3

Questo non è * convalida *, cioè * filtraggio *. – DCoder

+0

Non ho aggiunto() perché 1() avrebbe causato l'errore "non è una funzione" in una console e non mi piace vederlo; anche la valutazione può fallire a causa di parentesi graffe non corrispondenti. Anche se probabilmente dovrei usare try/catch. Grazie per il modulo e l'esponente dell'altro post. –

Problemi correlati