Le rapport d'analyse statique Veracode pointe les erreurs d'injection SQL dans mon implémentation de fournisseur de contenu.Comment désinfecter toutes les variables passées au tableau selectionArgs?
Auparavant, j'ai posté ce question lié à tous mes doutes concernant cette faille. Et après quelques discussions, je suis arrivé à la conclusion qu'il pourrait y avoir des chances que ce soit un faux positif dans le rapport. Parce que selon ce que j'ai recherché et lu, je suivais les directives de sécurité mentionnées dans Android docs et other referenced sources pour éviter l'injection SQL.
Il est suggéré partout d'effectuer au moins une validation d'entrée sur les données passées aux requêtes SQL. Je veux couvrir cette possibilité qui est la raison de la faille. Tout le monde me demande d'assainir les données avant de passer à la requête. Comment est-ce que je désinfecte exactement les variables passées au tableau selectionArgs passé à la méthode delete(), update() de Content Provider?
Est-ce que DatabaseUtils.sqlEscapeString() sera suffisant? Veuillez nous suggérer!
est ici la mise en œuvre où je dois désinfectez la variable:
public Loader<Cursor> onCreateLoader(int id, Bundle b) {
switch (id) {
case THOUGHT_LOADER:
return new CursorLoader(getActivity(), NewsFeedTable.CONTENT_URI, NewsFeedTable.PROJECTION, NewsFeedTable._id + "=?", new String[]{tid}, null);
case COMMENT_LOADER:
return new CursorLoader(getActivity(), CommentTable.CONTENT_URI, CommentTable.PROJECTION, CommentTable.COLUMN_TID + "=?", new String[]{tid}, null);
default:
return null;
}
}
points de rapport à la faille: Neutralisation incorrecte d'éléments spéciaux utilisés dans une commande SQL ('injection SQL') (CWEID 89) à cette ligne
supprimé = db.delete (BulletinTable.TABLE_NAME, sélection, selectionArgs); dans le code ci-dessous:
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
if (uri.equals(Contract.BASE_CONTENT_URI)) {
deleteDatabase();
return 1;
}
SQLiteDatabase db = openHelper.getWritableDatabase();
int deleted = 0;
switch (matcher.match(uri)) {
case BULLETIN:
deleted = db.delete(BulletinTable.TABLE_NAME, selection, selectionArgs);
break;
case CLASSROOMS:
deleted = db.delete(ClassroomsTable.TABLE_NAME, selection, selectionArgs);
break;
default:
throw new IllegalArgumentException("Unsupported URI: " + uri);
}
if (deleted > 0) {
getContext().getContentResolver().notifyChange(uri, null);
}
return deleted;
}
@CL, j'ai ajouté l'extrait de code où les rapports points défaut dans la question. Il ne se plaint d'aucune valeur spécifique, mais donne seulement les numéros de ligne dans le code où cette faille a été détectée avec des détails concernant la faille et quelques recommandations. C'est la méthode delete() de l'implémentation Content Provider. J'ai supprimé l'image et ajouté du code à sa place. – Priya
Qu'ont ces deux morceaux de code à faire l'un avec l'autre?Où est-ce que 'delete' est appelé? Et pourquoi n'est-ce pas une copie de votre question précédente? –
Oui, ce sont deux morceaux de code différents. Ils n'ont rien à faire l'un avec l'autre. Premier extrait de code: _Affiche l'implémentation comment je passe des variables dans selectionArgs Array._ Deuxième extrait de code: _Points où la faille est détectée._ Marquer comme Dupliquer: Peut-être que cette question peut être considérée comme doublon.Mais j'essayais de obtenir la réponse de mon autre question sur la désinfection des données. Donc, j'ai pensé à créer une question différente. – Priya