Disallow `rm` to remove `*`
The vulnerability I see is that only the first two arguments are checked.  You could check all of them:

rm() { 
    [[ $- == *i* ]] &amp;&amp; for arg
    do 
        if [[ $arg = "*" || $arg = "./*" ]]
        then
            # abort
       fi
   done
   # do the rm


This kind of checking will miss other dangerous wildcards like ** or ?*.  You can get safer checking by expanding * yourself, then see if the expanded arguments contain that same list of files:

# alias not needed here; we want globs to be expanded
rm() {
    declare -a star=(*)
    declare -a dotslashstar=(./*)
    if [[ "$@" == *"${star[@]}"*  ||  "$@" == *"${dotslashstar[@]}"* ]]
    then
         # abort


... but then you can't (for example) empty a directory full of temp files with rm *.tmp, if *.tmp and * match the same thing.