Question
· Fév 13

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.

Version du produit: 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
Discussion (5)3
Connectez-vous ou inscrivez-vous pour continuer

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 %request As %CSP.Request
	Set ^dc.pierre("OnStartRequest", "LastRequest") = $ZDT($Horolog, 3, 1) _ " " _ %request.URL
	Set loginURL = "/login"
	If $Extract(%request.URL, * - $Length(loginURL) + 1, *) = loginURL {	; Vérifie si l'url se termine par /login
		Hang 1
	}
	
	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.

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 :)