Hoy tuve una discusión (algo acalorada) con mi colega sobre qué personajes debería aceptar nuestra aplicación. Esto fue motivado por el descubrimiento de que puede ingresar cualquier cosa en el cuadro de búsqueda y la aplicación deberá realizar una búsqueda por esa cadena. Sin embargo, esto se aplica por igual a todos los cuadros de texto de la aplicación, no solo al cuadro de búsqueda.
Mi colega opina que la mejor práctica (desde un punto de vista de seguridad) es limitar los caracteres permitidos a algunas letras, dígitos y un subconjunto de símbolos. Esto evita que el usuario ingrese todo tipo de caracteres de control Unicode no imprimibles y cualquier otro modo.
Por otra parte, opino que esto solo molestará a los usuarios y no ofrecerá ninguna seguridad adicional. Creo que la mejor práctica es hacer que su aplicación acepte cualquier cosa , y luego use las funciones de codificación adecuadas (y las consultas parametrizadas si están disponibles) para asegurarse de que la cadena ingresada pase sin ser modificada y se muestre / utilizado como ingresado. Si el usuario ingresa basura, verá basura, pero el sistema funcionará correctamente.
¿Cuál es la mejor práctica de la industria aquí?
Añadido: Parece que no he sido muy claro. La pregunta es sobre lado del servidor , y se supone que todas las codificaciones / escapadas correctas están en su lugar cuando se usa la cadena (por ejemplo, utilizando parámetros para SQL, Código HTML para la salida a HTML, etc.). Dado todo esto, ¿tiene sentido limitar los caracteres permitidos que llegan del cliente?