Pretexto
Estoy implementando Apache Solr como motor de búsqueda. Solr está utilizando su propio lenguaje de consulta, por ejemplo:
search(s2, q=author:"user_str", fl="id,title,authors", sort="id asc", qt=/export)
Allí, los usuarios proporcionan user_str
para buscar un autor. Esto puede ir acompañado de búsquedas con comodines, por lo que esto podría complicarse.
Algunas de estas consultas pueden ser muy costosas y causar DoS para otros usuarios, por eso prefiero que mis usuarios no ingresen sus propios parámetros de búsqueda.
He visto el solr-haystack's método de entrada de saneamiento (básicamente, escapar de todo), pero no estoy seguro de que esto sea todo lo que hay.
Los resultados más frecuentes en la búsqueda de una solución para proteger la interfaz son las declaraciones preparadas, pero no puedo aplicar eso al DSL (lenguaje específico del dominio) de Solr, ya que no hay implementaciones para esto.
Por lo tanto, con todo esto fuera del camino, generalmente se desaconseja rodar su propia limpieza de insumos, ya que está obligado a hacerlo mal. Ya que siento que me he quedado sin opciones, además de implementar la mía: aquí estoy preguntando.
La pregunta
¿Dónde puedo encontrar recursos sobre cómo implementar realmente un saneamiento de entrada de usuario sano y seguro, por ejemplo? ¿Implementando declaraciones preparadas para los DSL en general?
Estoy más interesado en aprender recursos sobre este tema, pero parece que no puedo encontrar ninguno.
Soy fluido en varios lenguajes de programación y no tengo miedo de mirar las implementaciones de código abierto para las declaraciones preparadas. La única razón por la que no lo hice, porque, según mi experiencia, este tipo de código está apenas documentado y puede hacer las cosas mal.
Lo que ya he probado
- OWASP : sus recursos se adaptan más a los novatos de seguridad que intentan informarse. Lo cual es genial, pero no hay nada sobre cómo escribir su propio desinfectante. He estado usando su información para enseñar a otros, pero no puedo aplicar esto aquí.
- Stack Overflow y esta humilde morada aquí: ambos contienen excelentes consejos para algunos desinfectantes de entrada, pero desalientan enormemente el rodar los tuyos; al menos eso es lo que obtuve en mis búsquedas.
Lo que creo que ya sé
- Unicode puede ser un b **** ya que algunos caracteres se traducen en otros con el mismo significado.
- el uso de python en esta configuración puede ser un problema adicional, ya que no existe seguridad de tipos, per se.
- Solr tiene CVEs poco frecuentes, pero aterradoras (camino transversal, RCE) y, a juzgar por buscar en la base del código y en la documentación, no hay muchos dispositivos de seguridad que mitiguen los ataques entrantes y la ejecución del código.
- Mi conjetura es: tendría que implementar mi propio tokenizer / parser para este lenguaje, para lograr la mejor protección.