Active Android es propenso a las inyecciones de SQL. ¿Alguna solución conocida?
La aplicación de Android ya está desarrollada con ActiveAndroid
public static List<ModelNames> search(String pattern) { return new Select().from(ModelNames.class) .where("title LIKE '%" + pattern + "%' or content LIKE '%" + pattern + "%'") .orderBy("title") .execute(); }
Ahora es propenso a las inyecciones de SQL.
- ¿Cómo puedo extraer la base de datos sqlite desde el dispositivo Android?
- Base de datos de SQLite Android eliminada después de desinstalar
- Consulta de Sqlite para varios valores en una columna
- Consulta de actualización de Android SQlite
- Sincronizar datos SQLite desde el teléfono Android a la base de datos MySQL de MySQL de Windows
¿Alguien se enfrentó a un problema similar y encontró una solución o alguien podría proporcionar una solución para el mismo?
Encontramos un problema en github , pero no pudimos obtener una solución adecuada.
- Abrir y editar archivos PDF en la aplicación de Android con API
- ¿Cómo obtener el recuento de filas de una consulta en Android usando SQLite?
- Recyclerview + Proveedor de contenido + CursorLoader
- Xml vs. sqlite para android y cómo
- Cómo escribir contiene consulta en SQLite fts3 fulltext search
- Cómo probar proveedores de contenido en Android
- Cómo incrementar el campo en la base de datos sqlite android
- Obtención de todos los registros de sqlite android
Los ejemplos en el sitio web muestran cómo usar marcadores de posición:
public static List<ModelNames> search(String pattern) { pattern = "%" + pattern + "%"; return new Select().from(ModelNames.class) .where("title LIKE ? or content LIKE ?", pattern, pattern) .orderBy("title") .execute(); }
Lo que hago es asumir, que todo lo que un usuario ingresa es una amenaza, por lo que ahorraría todo a variables como usUsername, donde "us" significa inseguro. Después de eso, comprobar cada "nosotros" -variable para inyecciones, lo que resulta en sUsername (s significa seguro). Así que cuando construyo una consulta sólo puedo usar s-varaibles y debería ser seguro en la mayoría de los casos.
Esta idea se toma totalmente de aquí: http://www.joelonsoftware.com/articles/Wrong.html
Ya mencionado en esta pregunta .
Descubrí una solución, pero dejé que otras personas respondieran con mejor propuesta con respecto a ActiveAndroid ORM.
Siguiente es la solución:
public static List<ModelNames> search(String pattern) { return new Select().from(ModelNames.class) String pattern = DatabaseUtils.sqlEscapeString(searchBar.getText().toString()); pattern = pattern.substring(1, pattern.length()); pattern = pattern.substring(0, pattern.length()-1); .where("title LIKE '%" + pattern + "%' or content LIKE '%" + pattern + "%'") .orderBy("title") .execute(); }
Ref: sqlEscapeString