Do hashowania haseł jest password_hash → tyle w temacie.
Do wstawiania danych do bazy używa się prepared statements
Co do bana na rok: no bez przesady. Raczej 5 prób → ban na godzinę. Na dłużej nie ma sensu, zwłaszcza, że zmiana IP dzisiaj to banalna sprawa.
Nieudostępnianie formularza użytkownikom, którym nie możesz sprawdzić IP… Cóż, to jest tak dziwne, że aż nie wiem co powiedzieć ;)