strawberry-code / IFTTT-PoliTo

The portal of Polito IFTTT project by PRPC team. Visit our website at
https://cristiano-c.github.io
1 stars 1 forks source link

Problema di sicurezza generale #49

Closed sablaireau closed 8 years ago

sablaireau commented 8 years ago

1) Ho provato ad inviare un e.mail falsa dalla gmail action e me l'ha accettata. L'indirizzo era pippo. Quindi si dovrebbe usare più angular per la parte client quindi meno variabili globali e mettere più controlli sulla parte server. Ho usato un googleChrome con la console e ho cambiato il campo email del json ed è stata inviata.

2)Inoltre per ogni campo dalla parte client eseguiamo dei controlli di validità come ad esempio per la temperatura (-70/+70) si dovrebbero anche mettere sul server o ci sono già?

simonaPr commented 8 years ago

sì..domani me ne occupo

strawberry-code commented 8 years ago

Cioè, di norma il campo email viene già controllato dal client prima dell'invio, quindi nel caso normale vi arriverà sempre una email corretta.

Tuttavia, come ha notato @sablaireau è possibile aprire il dev tool del browser e modificare i campi (qualsiasi) del JSON con la ricetta. Per cui – in casi rari come questi – sarebbe opportuno gestire dei controlli anche nel lato server.

Aggiungo ancora una cosa: per le date, per esempio, se non mi sbaglio, il DB è in grado di rifiutare quei dati che non siano delle date. Non so come si faccia, ma suppongo che non debba essere una cosa difficile. Comunque non me ne intendo. 😁

simonaPr commented 8 years ago
strawberry-code commented 8 years ago

Per quanto riguarda la validazione delle email, abbiamo trovato questa REGEX che funziona molto bene:

var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;

return re.test(email);

dove re è la REGEX in questione, la funzione <regex>.test(<string>) in JavaScript ritorna false o true in questo caso.

Sicuramente ci sarà qualcosa di simile anche per il Java.

simonaPr commented 8 years ago

ok..provo a metterla..ma quindi non volete che testo che l'email esista davvero (ammesso che si possa fare), giusto?

strawberry-code commented 8 years ago

In che senso testare che l'email esista davvero?

simonaPr commented 8 years ago

che se metto ciao@gmail.com, l'email è nel formato corretto, ma probabilmente non esiste.. secondo me questo non è un grosso problema..se l'utente mette un email fasulla, semplicemente non riceverà mail l'email di attivazione e il suo account non verrà mai attivato. Siete d'accordo?

sablaireau commented 8 years ago

Ti faccio esempi di e.mail che accettiamo come formato:

o@l.uj o.l.s@l.uj o.s@l.s.uj

Formato non valido: Es:

o.s@l.s.s

Poi puoi anche fare altri controlli o cambiargli :)

strawberry-code commented 8 years ago

Si, non c'è bisogno di testare che la mail esista davvero... chi ci rimette, sarà colui che vorrà registrasi! XD

Quindi direi che va bene solo controllare il formato con quella regex per esempio.

sablaireau commented 8 years ago

uhm sperando che non usi il nostro servizio per fare un attacco di denial email XD

strawberry-code commented 8 years ago

Già, speriamo di no!

sablaireau commented 8 years ago

Allora se vogliamo fare le cose sicure dovremmo mandare un link a quel e.mail affinché venga attivata quel servizio su quel account oppure si deve registrare con quel email (la seconda mi sembra più potente come soluzione ma meno flessibile)

simonaPr commented 8 years ago

ma la nostra soluzione è proprio la prima...mandiamo il link a quell'email, se l'utente lo riceve e lo preme, il servizio viene attivato su quell'account (email)

sablaireau commented 8 years ago

No, intendevo dire che nel action di gmail posso inserire qualsiasi e.mail e quindi mandare il risultato della ricetta (meteo per domani ad esempio) ad una persona qualsiasi senza che essa ne sappia nulla solo per dargli fastidio

strawberry-code commented 8 years ago

Questo lo puoi fare anche nel vero IFTTT. È una possibilità lecita.

simonaPr commented 8 years ago

eh sì..anche perchè..come facciamo a controllare questo caso? Cioè..non possiamo sapere l'associazione di un utente con tutte le sue possibili email..cioè...come facciamo a sapere che l'email che inserisce non è una delle sue? Dobbiamo telefonargli e chiedergli :P Scherzo ovviamente!

sablaireau commented 8 years ago

No basta dirgli che si deve registrare anche con quella e.mail, ovviamente le mie sono solo locubrazioni mentali :) Mi stavo facendo un attacco da solo ahahhha o.k. lascio perdere :)

simonaPr commented 8 years ago

ahahahah..si direi che questi casi possiamo lasciarli stare

sablaireau commented 8 years ago

ottimo :)

simonaPr commented 8 years ago

allora..ho provato a rinforzare il controllo dell'email..tuttavia la vostra regex non me l'accettava, ho dovuto metterne un'altra, che però mi sembra molto più corta della vostra.. provate a vedere se funziona, io non so come fare a testarla..

simonaPr commented 8 years ago

devo aprire il terminale?

strawberry-code commented 8 years ago

Proviamo ad usare regex101! 😊

Nel commento che ho cancellato avevo sbagliato link 🙄

simonaPr commented 8 years ago

mmm..sembra che la regex che ho trovato io non funzioni.. adesso vedo di sistemarlo

simonaPr commented 8 years ago

ho provata a sistemarla (ho committato di nuovo)..il problema era il carattere "\" in java..quindi ho dovuto cambiare leggermente la vostra regex in modo che java me lo accettasse (spero di non avere fatto pasticci con la regex..cosa molto probabile). Ora per testarla dovrei cambiare il json in rete come facevate voi...come faccio?

sablaireau commented 8 years ago

allora è semplice

sablaireau commented 8 years ago

fai una ricetta e usa gmail action

sablaireau commented 8 years ago

metti una e.mail giusta se no ti da errore poi premi il tasto submit e fermati e apri la console da del browser

sablaireau commented 8 years ago

quando sei alla console del browser digita modulinoj2 cambia quello che ha in pancia

simonaPr commented 8 years ago

ok..ci provo..quindi devo mettere dei breakpoint?

sablaireau commented 8 years ago

no no nessun break point fermati quando sei alla descrizione non premere il tasto submit della descrizione

sablaireau commented 8 years ago

il model della descrizione deve essere aperto ci puoi anche scrivere dentro se ti fa piacere ma non premere il tasto del model della descrizione

strawberry-code commented 8 years ago

No, nessun breakpoint! @sablaireau intendeva dire:

  1. Fai partire il sito
  2. Apri il dev tool del browser
  3. Crea una ricetta con un trigger qualsiasi
  4. Quando devi scegliere una action scegli quella di GMail
  5. Compila i campi che vuoi, ma quello della email deve essere valido
  6. Premi submit e comparirà il form per inserire la descrizione della ricetta (l'ultimo form per intenderci)
  7. Lascia aperto quel form e vai nella console del browser
  8. Da quella console digita "modulinoj2" ora puoi modificarlo a piacere
  9. Prime il submit della descrizione della ricetta per inviare al server una email diciamo non valida
simonaPr commented 8 years ago

Ah ma cacchio..sto sbagliando tutto allora!! Io stavo mettendo i controlli al momento della registrazione..che l'email che l'utente inserisce sia corretta..

sablaireau commented 8 years ago

va bene anche li

sablaireau commented 8 years ago

più controlli fai meglio è

simonaPr commented 8 years ago

devo aggiungerli anche là

sablaireau commented 8 years ago

ma forse è meglio non ho testato quella parte mi sono fermato alla creazione della ricetta

sablaireau commented 8 years ago

in quella zona è più complicato, tuttavia se c'è un server resistente forse è meglio

strawberry-code commented 8 years ago

In realtà, tutto questo, ne parlavamo io e @sablaireau ieri, si poteva benissimo evitare a priori, utilizzando le variabili interne di AngularJS che non sono accessibili dal tool del browser.

Dopotutto, modulinoj1 e modulinoj2 sono due variabili globali... e quindi accessibili da chiunque. 🙄

Io dico, ormai è fatto così, per poter proteggere queste variabili si doveva usare AngularJS fin da subito e ora cambiare tutto è molto costoso in termini di tempo. Quindi io tralascerei questo problema e andrei avanti su altre cose.

simonaPr commented 8 years ago

sì sì..ma i controlli è sempre meglio farli anche sul server in ogni caso..adesso cerco di aggiungerli altrove.

Ragazzi..non trovo più il link alla "spiegazione del sito" che volete mandare al prof quando gli chiediamo l'appuntamento..me lo potreste passare per favore?

simonaPr commented 8 years ago

In ogni caso..la regex scritta così non funziona! Vado a mangiare anch'io, dopo ci penso

strawberry-code commented 8 years ago

Ragazzi..non trovo più il link alla "spiegazione del sito" che volete mandare al prof quando gli chiediamo l'appuntamento..me lo potreste passare per favore?

La pagina che cerchi potrebbe essere questa: https://cristiano-c.github.io oppure puoi guardare anche qui.

simonaPr commented 8 years ago

ok grazie..in realtà ho visto che non va bene. Perchè volevo modificare l'email di attivazione dell'account, scrivendo una cosa del tipo: If you didn't try to register to our site, please ignore this e-mail! e mettere il link al nostro sito (anche per pubblicità :P)..però è meglio se metto direttamente il link alla home del nostro sito.

Ovviamente..se poi non vi piace, possiamo di nuovo toglierlo.

simonaPr commented 8 years ago

Adesso l'email è così..ditemi se vi piace. Premendo su "ifttt polito" si va sulla home del nostro sito

untitled

sablaireau commented 8 years ago

Bella!!!! Troppo bella complimenti!!!!

strawberry-code commented 8 years ago

È stupenda!!! 😸

strawberry-code commented 8 years ago

Una 🏅per @simonaPr!

😄

simonaPr commented 8 years ago

Ahahaha..bien..sono contenta che vi piaccia :) Adesso cerco di fare la parte difficile: sistemare questa regex..

strawberry-code commented 8 years ago

Se ne trovano tanto in giro di regex per le email, si possono testare tutte utilizzando regex1010.

Le regex sono indipendenti da qualsiasi piattaforma.

simonaPr commented 8 years ago

eh lo so..ma java non accetta il carattere "\"...ho provato a sistemarla mettendo da qualche parte "\", ma ovviamente ho fatto casini perchè la registrazione così non funziona più. E su regex1010 non posso testarla, perchè se la metto in una forma accettabile per Java, lì ovviamente non funziona più