À l'issue de ce TP, vous aurez découvert :

Présentation des nouveautés sur la branche de ce TP

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