Écrit par

CEO at Ellipse
Question Pierre LaFay · Fév 13, 2024

Sécurité du login

Bonjour à tous,

Nous développons une application avec FrontEnd (angular) et BackEnd (objectscript Iris), nous utilisons l'identification intégrée grâce à la route /login fournie par %CSP.REST. Nous n'utilisons pas IAM, nous attaquons l'API directement.

Pour éviter les attaques automatisées, nous avons mis une temporisation sur le login (1s entre chaque tentative). Cela protège donc l'API dans le cadre de son utilisation via l'application.

Toutefois, cela ne protège pas complètement l'API, il est possible d'enchainer les logins avec postman sans délai entre les tentatives.

Nous nous demandons donc s'il y a une protection interne à Iris, pour faire face à ce problème (nombre max de login infructueux, délai pour une autre tentative) et si oui comment l'activer.

Product version: IRIS 2023.1
$ZV: IRIS for UNIX (Ubuntu Server 22.04 LTS for x86-64) 2023.1 (Build 229U) Fri Apr 14 2023 17:29:40 EDT

Comments

Sylvain Guilbaud · Fév 13, 2024

Bonjour Pierre,

le meilleur moyen de protéger l'API est d'utiliser API Manager (IAM), qui permet de gérer à la fois l'authentification et une limite sur la fréquence d'appels.

0
Lorenzo Scalese · Fév 15, 2024

Bonjour @Pierre LaFay ,

Effectivement comme l'a mentionné @Sylvain Guilbaud IAM t'offrira pas mal de fonctionnalité.

Toutefois si tu veux juste forcer un "Hang 1" lors du login, tu peux t'en sortir une sous classe de %CSP.SessionEvents, ex:

Class dc.pierre.RestEvents Extends%CSP.SessionEvents
{

ClassMethod OnStartRequest() As%Status
{
	#dim%requestAs%CSP.RequestSet^dc.pierre("OnStartRequest", "LastRequest") = $ZDT($Horolog, 3, 1) _ " " _ %request.URLSet loginURL = "/login"If$Extract(%request.URL, * - $Length(loginURL) + 1, *) = loginURL {	; Vérifie si l'url se termine par /loginHang1
	}
	
	Quit$$$OK
}

}

Il faut alors configurer l'application Web pour utiliser cette classe d'évènements.

Cela peut se paramétrer via le portail admin gestion de la sécurité -> Application Web, ex : 

Lorenzo.

0
Pierre LaFay  Fév 16, 2024 to Lorenzo Scalese

Merci @Lorenzo Scalese pour ta réponse qui correspond à ce que je souhaite faire.

J'ai peut-être un complément : Je crois comprendre que la méthode OnStartRequest() va être appelée avant le login proprement dit.

Ne devrais-je pas utiliser plutôt OnLogin()  ou OnEndRequest() pour exécuter mon code après le login ?

Je vais faire quelques tests ce matin

0
Lorenzo Scalese  Fév 16, 2024 to Pierre LaFay

Bonjour @Pierre LaFay ,

Avec plaisir!

Pour le OnLogin, je n'ai pas essayé, mais pour le OnEndRequest j'ai tenté le coup et ce fut un échec :D

Malgré que le OnEndRequest soit bien exécuté, j'ai l'impression qu'il est "asynchrone" ou plutôt qu'il est exécuté après que la réponse soit envoyée au client.  Donc même si on fait Hang dans le OnEndRequest, c'est déjà trop tard malheureusement.

N'hésite pas à partager tes découvertes :)

0