Research
Security News
Malicious npm Packages Inject SSH Backdoors via Typosquatted Libraries
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
applitutoriel-js
Advanced tools
L'application TUTORIEL a pour objectif de présenter une application basée sur le framework Hornet.
A noter :
Cas fonctionnels
Les cas fonctionnels présentés dans l'application sont :
RGAA V3
L'applitutoriel est une mise en pratique du RGAA V3 au travers du framework Hornet.
$ npm install -g hornet-js-builder
applitutoriel-js
Se positionner dans le répertoire du projet applitutoriel-js
et lancer la commande:
$ hb install
la commande à exécuter en mode développement est la suivante:
$ hb w
Elle permet de lancer l'application en mode watcher
afin que les modifications soient prises en compte (ce qui
entrainera un redémarrage du serveur node dans le cas d'une détection de modification).
Il est également possible d'ajouter à cette commande l'option:
$ hb w -i
Cette commande indique au builder de ne pas transpiler les fichiers typescript en javascript. Elle est à utiliser dans le cas où l'IDE a été configuré de telle sorte que la transpilation ts->js se fasse via ce dernier.
L'application est accessible depuis un navigateur à l'addresse : http://localhost:8888/applitutoriel/
où applitutoriel correspond au contextPath
dans le fichier config/default.json
.
Il est possible d'utiliser l'applitutoriel sans déployer la partie service.
Pour cela, activer le mode mock
dans le config/default.json
.
"mock": {
"enabled": true,
"host": "127.0.0.1", //default localhost
"routes": "/mock/routes"
}
$ hb package
Les livrables sont à récupérer dans le répertoire : target
applitutoriel-5.0.X-static.zip
applitutoriel-5.0.X-dynamic.zip
L'ensemble de la configuration applicative du serveur NodeJS se situe dans le fichier default.json contenu dans les sources de l'application
Ce fichier ne doit pas être modifié, excepté pour le log console. Les modifications sont à apporter dans les fichiers d'infrastructure.
Paramètre | Description | Valeur |
---|---|---|
contextPath | Context de l'applicatin déployé | Par défaut vide |
welcomePage | Page de démarrage de l'application | Passé en paramètre du ServerConfiguration |
themeUrl | Url du thème applicative | [Protocol]://[host]:[port]/hornet/themName |
{
"contextPath": "applitutoriel",
"welcomePage": "/accueil",
"themeHost": "http://localhost:7777",
"themeUrl": "${themeHost}/5.0.X/default"
...
}
Paramètre | Description | Valeur |
---|---|---|
route | Route identifié pour l'affinité de session nodejs | js1 |
port | Port de démarrage du serveur | 8888 |
keepAlive | Activation du mode HTTP KeepAlive | true |
maxConnections | Nombre maximal de connexion à l'instance nodejs | 100 |
timeout | Timeout des réponses HTTP | 300000 |
uploadFileSize | Taille maximal d'upload de fichier | 1000000 |
sessionTimeout | Timeout des sessions utilisateur | 1800000 |
"server": {
"route": "js1",
"port": 8888,
"keepAlive": true,
"maxConnections": 100,
"timeout": 300000,
"uploadFileSize": 1000000,
"sessionTimeout": 1800000
}
Cette partie contient l'ensemble du paramétrage spécifique aux exécutions réalisées coté serveur, ainsi que ses spécificités de démarrage.
Paramètre | Description | Valeur |
---|---|---|
domain | Domain du cookie | null |
path | Path du cookie | null |
httpOnly | Activation du mode HTTP KeepAlive | true |
secure | securisation du cookie | true |
alwaysSetCookie | Ajout du cookie dans le Header | false |
"cookie": {
//"domain": null,
//"path": null,
"httpOnly": true,
"secure": false
//"alwaysSetCookie": false
}
Ce bloc contient l'ensemble des paramètres destinés à la configuration de helmet.
Paramètre | Description | Valeur |
---|---|---|
enabled | Activation de la sécurité | true |
hpp | HTTP Parameter Pollution attacks | true |
ienoopen | Middleware for IE security. Set X-Download-Options to noopen | true |
noSniff | keep clients from sniffing the MIME type | true |
csp.enabled | Activation de CSP (Content Security Policy) | true |
csp.defaultSrc | noms de domaine par défaut des différentes ressources du site | ["'self'", {hostname}] |
csp.scriptSrc | noms de domaine des différentes ressources de scripts du site | ["'self'", "'unsafe-inline'", "'unsafe-eval'"] |
csp.styleSrc | noms de domaine des différentes ressources de css du site | ["'self'", {hostname}] |
csp.fontSrc | noms de domaine des différentes ressources de fonts du site | ["'self'", {hostname}] |
csp.imgSrc | noms de domaine des différentes ressources d'images scripts du site | ["'self'", {hostname}] |
csp.reportOnly | si valorisé à true, génération d'un rapport d'erreur uniquement | false |
csp.setAllHeaders | valorisé à true si tous les headers doivent être settés | false |
csp.disableAndroid | permet de désactiver la navigation via Android | false |
csp.safari5 | permet de désactiver la navigation via safari5 | false |
xss.enabled | Activation de la protection contre les failles XSS | true |
xss.setOnOldIE | Force le header X-XSS-Protection sur les anciens IE | true |
hpkp.enabled | Activation du Public Key Pinning: HPKP, HTTPS certificates can be forged, allowing man-in-the middle attacks | true |
hpkp.maxAge | Durée de validation | 7776000000 |
hpkp.sha256s | Liste des sha au format 256 | ["AbCdEf123=","ZyXwVu456="] |
hpkp.includeSubdomains | Inclusion des sous domaines | true |
hpkp.reportUri | url de rapport | vide |
hsts.enabled | Activation du HTTP Strict Transport Security: hsts | false |
hsts.maxAge | Durée de validation | 7776000000 |
hsts.includeSubdomains | Inclusion des sous domaines | true |
hsts.preload | Activation du preload dans le header HSTS | false |
csrf.enabled | Activation du mode CSRF : Cross-Site Request Forgery | true |
csrf.maxTokensPerSession | Nombre de token par session | 10 |
"security": {
"enabled": true,
"hpp": true,
"ienoopen": true,
"noSniff": true,
"csp": {
"enabled": true,
"defaultSrc": [
"'self'",
"'unsafe-inline'",
"'unsafe-eval'",
"[Protocol]://[host]:[port]"
],
"scriptSrc": [
"'self'",
"'unsafe-inline'",
"'unsafe-eval'"
],
"styleSrc":[
"'self'",
"[Protocol]://[host]:[port]",
"'unsafe-inline'"
],
"fontSrc":[
"'self'",
"[Protocol]://[host]:[port]"
],
"imgSrc":[
"'self'",
"[Protocol]://[host]:[port]"
],
"reportOnly": false,
"setAllHeaders": false,
"disableAndroid": false,
"safari5": false
},
"frameguard": {
"enabled": true,
"mode": "deny",
"allowFromPattern": ""
},
"xss": {
"enabled": true,
"setOnOldIE": true
},
"hpkp": {
"enabled": true,
"maxAge": 7776000000,
"sha256s": [
"AbCdEf123=",
"ZyXwVu456="
],
"includeSubdomains": true,
"reportUri": null
},
"hsts": {
"enabled": false,
"maxAge": 10886400000,
"includeSubdomains": true,
"preload": false
},
"csrf": {
"enabled": true,
"maxTokensPerSession": 10
}
}
Niveau de log :
Paramètre | Description | Valeur |
---|---|---|
level.[all] | niveau de log pour toute l'application | INFO |
level.monappli.view | niveau de log spécifique pour une partie de l'application | optionnel |
"log": {
"levels": {
"[all]": "DEBUG",
"hornet-js-components.table": "TRACE"
}
...
Déclaration des appenders :
Paramètre | Description | Valeur |
---|---|---|
type | Type d'appender | file pour un fichier simple dateFile pour un fichier contenant la date console ... |
filename | Chemin absolu ou relatif au lancement du fichier de log | /var/log/nodejs/applitutoriel/applitutoriel-1.log |
pattern | Présent pour les types dateFile Permet de donner un pattern de date qui sera ajouté au nom du fichier. | -yyyy-MM-dd |
layout.type | Type d'affichage des messages | pattern |
layout.pattern | Schéma d'affichage des messages | "%[%d{ISO8601} |
Ex: type console
"appenders": [
{
"type": "console",
"layout": {
"type": "pattern",
"pattern": "%[%d{ISO8601}|%x{tid}|%x{user}|%p|%c|%x{fn}|%m%]"
}
}
]
ex : type fichier
"appenders": [
{
"type": "dateFile",
"filename": "log/app.log",
"layout": {
"type": "pattern",
"pattern": "%d{ISO8601}|%x{tid}|%x{user}|%p|%c|%x{fn}|%m"
}
}
]
Paramètre | Description | Valeur |
---|---|---|
remote | Activatino des remotes log | false |
level | niveau de log | INFO |
"logClient": {
"remote": false,
"level": "TRACE",
...
Type BrowserConsole :
Paramètre | Description | Valeur |
---|---|---|
type | Type d'appender | BrowserConsole |
layout.type | Type d'affichage des messages | THIN/BASIC/pattern/... |
layout.pattern | Schéma d'affichage des messages | "%p |
"appenders": [
{
"type": "BrowserConsole",
"layout": {
"type": "THIN"
}
}
Type Ajax :
Paramètre | Description | Valeur |
---|---|---|
type | Type d'appender | Ajax |
layout.type | Type d'affichage des messages | THIN/BASIC/pattern/... |
layout.pattern | Schéma d'affichage des messages | "%p |
threshold | Seuil d'envoi des messages de log | 100 |
timeout | Timeout d'envoie des messages | 3000 |
url | url d'envoie des logs | /logs |
"appenders": [
{
"type": "Ajax",
"layout": {
"type": "BASIC"
},
"threshold": 100,
"timeout": 3000,
"url": "/log"
}
]
Configuration de l'adresse du service par défaut
Paramètre | Description | Valeur |
---|---|---|
defaultServices.host | URL de déploiement du module applitutoriel-service | [Protocol]://[host]:[port] |
defaultServices.name | Nom de déploiement des services | applitutoriel |
secteursServices.host | URL de déploiement d'un service supplémentaire | [Protocol]://[host]:[port] |
secteursServices.name | Nom de déploiement d'un service supplémentaire | applitutoriel |
"defaultServices": {
"host": "http://localhost:8080/",
"name": "applitutoriel-service"
},
"secteursServices": { // configuration multi-service : exemple de definition d'un service specifique pour les secteurs
"host": "http://localhost:8080/",
"name": "applitutoriel-service"
},
Paramètre | Description | Valeur |
---|---|---|
enabled | Activation du mode mock de l'application | false |
routes | Chemin vers le fichier de routes mocké sans le /src | /mock/routes |
defaultServices.host | Host local du mock | localhost |
secteursServices.host | URL de déploiement d'un service mock supplémentaire | [Protocol]://[host]:[port] |
secteursServices.name | Nom de déploiement d'un service mock supplémentaire | applitutoriel/hornet-mock |
"mock": {
"enabled": false,
"routes": "/mock/routes",
"defaultServices": { // service mock par defaut : le contexte est toujours "applitutoriel/hornet-mock"
"host": "http://localhost:${server.port}/" //default localhost:8888
},
"secteursServices": { // configuration multi-service : exemple de definition d'un mock specifique pour les secteurs
"host": "http://localhost:${server.port}/",
"name": "applitutoriel/hornet-mock"
}
}
NOTE : Le mode fullSPA n'est pas encore complètement supporté par hornet, la configuration est présente à titre d'information
Paramètre | Description | Valeur |
---|---|---|
enabled | Activation du mode fullSPA | false |
host | Host du mode fullSPA | "" |
name | nom du service pour le mode fullSPA | /services |
staticPath | prefixe des resources statiques pour le mode fullSPA | "" |
"fullSpa": {
"enabled": false,
"host": "",
"name": "/services",
"staticPath": ""
}
NOTE : non opérationnel
Note : Il ne s'agit pas d'une configuration à proprement parler de Hornet mais uniquement viable dans l'applitutoriel
Paramètre | Description | Valeur |
---|---|---|
loginUrl | Url de connexion à l'application | /login |
logoutUrl | Url de déconnexion à l'application | /logout |
cas.enabled | Activation du mode CAS | false |
cas.configuration.urlCas | url complète du CAS | |
cas.configuration.hostUrlReturnTo | url de retour après authentification sur le CAS | |
cas.configuration.paths.login | url déclenchant le process de connexion | /login |
cas.configuration.paths.logout | url déclenchant le process de déconnexion | /logout |
cas.configuration.paths.validate | url du service de validation des tichets CAS | |
cas.configuration.paths.casLogin | url de connexion du CAS | |
cas.configuration.paths.casLogout | url de déconnexion du CAS |
"authentication": {
"loginUrl": "/login",
"logoutUrl": "/logout"
"cas": {
"enabled": true,
"configuration": {
"urlCas": "http://cas-url:80",
"hostUrlReturnTo": "http://localhost:8888",
"paths": {
"login": "/login",
"logout": "/logout",
"validate": "http://cas-url/serviceValidate",
"casLogin": "http://cas-url/login",
"casLogout": "http://cas-url/logout"
}
}
}
}
Paramètre | Description | Valeur |
---|---|---|
enabled | Activation du cache sur les requêtes de services | true |
timetolive | Durée de rétention du cache | 60 |
"cache": {
"enabled": true,
"timetolive": 60
}
applitutoriel-service
est sous licence cecill 2.1.
Site web : http://www.cecill.info
FAQs
Application tutoriel utilisant le Framework hornet
The npm package applitutoriel-js receives a total of 0 weekly downloads. As such, applitutoriel-js popularity was classified as not popular.
We found that applitutoriel-js demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.