No piense en proteger sus entradas para evitar XSS, todo debe tratarse de resultados.
XSS y otras vulnerabilidades de inyección de código ocurren cuando los datos no se escapan o no se convierten correctamente para el contexto en el que se utilizarán.
La forma de hacerlo depende de la tecnología de salida y del contexto. Como mencionó AndrolGenhald en los comentarios, si está realizando una salida directamente desde PHP, sin usar una biblioteca de plantillas, y desea usar una variable en el contexto del código HTML, debe pasarla a través de htmlspecialchars . Con otros contextos y tecnologías la respuesta será diferente. Debe encontrar la forma correcta de escapar de los datos para cada contexto.
Si puedes asegurarte de que siempre estás escapando los datos en la salida correctamente, entonces no debes usar FILTER_SANITIZE_STRING. Eso elimina irreversiblemente varias cosas de la cuerda, en lugar de simplemente hacerlas seguras. En un sitio web bien hecho como StackExchange, puedo enviar el código <script>alert('XSS')</script>
, y no se elimina, solo se codifica para que el navegador lo muestre de manera segura en lugar de ejecutarlo.
El código en su pregunta no incluye ningún resultado, por lo que no puede ser vulnerable a XSS. Debe mostrar el código que produce algún resultado si desea saber si lo hace de forma segura.