Guarda uno dei modi migliori per evitare un brute force e' tracciare l'ip e se l'ìp ha gia' effettuato almeno un accesso durante la giornata piazzi una sleep(5); e vedrai che i brute force nn funzionano piu' perche' il tempo utile a identificare un accesso diventa talmente alto che potresti vedere il sole splodere (almeno con i sistemi attuali)
Per quanto riguarda gli altri problemi beh ... dipendeono sempre e fondamentalmente da quanto sicuro e' il pc di chi si connette.
Diciamo che se controlli l'header e recuperi i dati dello user-agent sai gia' chi si collega.
Per crittografare i dati con js devi stare attento perche' devi spedire la chiave pubblica in qlke modo e MAI scriverla sulla pagina, inoltre tale chiave dovra' essere dinamica e assegnata volta per volta che crei una sessione.
ovviamente l devi generare appena l'utente avvia la pagina poi la salvi in sessione
quindi generi una chiave privata che usi pre crittografare i dati.
quindi crittografi tutto(chiave privata compresa) e salvi in sessione.
invii la chiave pubblica alla pagina (con ajax)
quando l'utente vorra' fare login se la sessione scade la chiave non sara' piu' valida e dovra' rieffettuare le procedura da capo, altrimenti useri la chiave pubblica per crittare i dati di accesso che dovranno contenre anche la chiave stessa crittografata con se stessa.
Quindi sul server decrittografi tutto con la chiave pubblica che hai salvato prima in sessione quindi controlli la chiave pubblica interna(e' sempre un controllo di coerenza in piu'), quindi estrai la chiave pubblica e la usi per decrittare i dati di sessione , quindi ottieni nuovamente la chiave privata, con tale chiave decritti i dati e li controlli.
Questo e' un possibile automa di cirttografia/decrittografia con chiave pubblica e privata.
Ci sono altri 200000000 di modi diversi per implementarli etc.... dovrai effettuare una scelta basta su difficolta e prestazioni.
Gud Lac....
P.S.
Io cmq ti consiglio ssl che' ha fa gia' tutto e' super testato.