Pues en ningún momento validas que hacer en caso contrario de que la URL no tenga http:// ni https:// así que podría colocar incluso "x" y pasaría tus validaciones.
Además poder introducir "#" está muy lejos de ser considerado un ataque, no lo es, es un descuido tuyo.