Récupérer la branche du TP :
git checkout 5_start_tp_faille_de_securite
Les nouveautés sur cette branche sont les suivantes :
En tant qu'attaquant, nous souhaitons faire prédire une valeur négative à notre modèle.
En manipulant les données fournies en entrée, essayer des valeurs extrêmes jusqu'à ce que le modèle prédise une valeur négative.
Comme nous avons identifié une règle métier (l'inférence ne peut pas être négative), nous vous proposons de l'implémenter comme contrôle qualité de notre inférence.
En utilisant pandera
il est possible de contrôler également les outputs.
Pour cela, décorer la fonction predict_model
avec le décorateur :
@pa.check_output(PredictionSchema)
def predict_model(df: pd.DataFrame, model_handler: ModelHandler) -> pd.DataFrame:
...
Puis définir un PredictionSchema
en s'inspirant du schema:source.domain.entities.customer_data_schema.RawCustomerSchema
Tester votre API en vérifiant que l'attaque ne passe plus.
Rappel : pour les visualiser en flux, taper dans un terminal la commande :
tail -f /home/jovyan/api_logfile.log
Nous avons également identifié une faille dans les inputs : nous n'avons pas fixé de limites sur les valeurs pour l'âge des clients alors que le métier nous dit qu'ils ont entre 18 et 125 ans.
Implémenter ce contrôle dans le schéma.
Les instructions du TP suivant sont ici