Outils pour utilisateurs

Outils du site


web:javascript:nodejs:toc

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
web:javascript:nodejs:toc [2019/06/20 04:00] – [Tests] sgariepyweb:javascript:nodejs:toc [2023/10/03 18:43] (Version actuelle) sgariepy
Ligne 1: Ligne 1:
 +====== NodeJS ======
 +
 +  * [[web:javascript:nodejs:api|Faire un API en NodeJS]]
 +  * [[web:javascript:nodejs:bots|Créer un bot pour Twitter]]
 +  * [[web:javascript:nodejs:cache|Redis]]
 +  * [[web:javascript:nodejs:db-migrate|db-migrate]]
 +  * [[web:javascript:nodejs:http2|HTTP2 avec Node]]
 +  * [[web:javascript:nodejs:json-server|JSON Server]]
 +  * [[web:javascript:nodejs:nestjs|NestJS]]
 +  * [[web:javascript:nodejs:npm|NPM]]
 +  * [[web:javascript:nodejs:swagger|Swagger]]
 +
 +
 ====== Installation ====== ====== Installation ======
  
Ligne 53: Ligne 66:
  
 Source : [[http://stackoverflow.com/questions/6084360/using-node-js-as-a-simple-web-server|Using node.js as a simple web server]] Source : [[http://stackoverflow.com/questions/6084360/using-node-js-as-a-simple-web-server|Using node.js as a simple web server]]
 +
 +
 +
 +====== Sécurité avec Node, Express et AngularJS ======
 +
 +===== Sécurité de base =====
 +
 +  $ npm audit
 +
 +
 +
 +
 +
 +===== Protéger les données de l'extraction ===== 
 +
 +
 +===== XSS =====
 +
 +La façon traditionnelle de se procurer des informations et d'utiliser le XSS.  Par exemple, dans une boîte de saisie, si on entre ''<script>alert(sessionStorage.userAuthToken);</script>'' on pourrait afficher de l'information sur le token de l'utilisateur.
 +
 +
 +==== Prévention ====
 +
 +  * Input Validation, Sanitization and Escaping
 +  * Content Security Policy : Create a contract between your server and the browser for permitted origins.
 +
 +===== Content Security Policy =====
 +
 +
 +Dans l'entête HTTP de la réponse que le client reçoit, on peut ajouter une entête ''content-security-policy''.
 +
 +Un exemple de valeur est : 
 +
 +  content-security-policy: default-src 'self'; style-src 'self'; img-src 'self' http://localhost:8080;
 +  
 +
 +Supporté par les navigateurs récents, pas IE8, IE9 et IE11 supporte ''X-Content-Security-Policy'' Voir [[http://caniuse.com/#search=content%20security%20policy|Can I Use - Content Security Policy 1.0]].
 +
 +Pour plus de détails, voir [[https://www.smashingmagazine.com/2016/09/content-security-policy-your-future-best-friend/|Content Security Policy, Your Future Best Friend]].
 +
 +
 +
 +===== XSS Filters =====
 +
 +
 +Le [[https://github.com/yahoo/xss-filters|Secure XSS Filters]] est un module qui peut être utilisé dans node pour nettoyer les entrées utilisateur.
 +
 +  $ npm install xss-filters --save
 +
 +===== Lusca =====
 +
 +[[https://github.com/krakenjs/lusca|Lusca]] est un middleware de sécurité pour gérer les //Content Security Policy// (CSP).
 +
 +  $ npm install lusca --save
 +
 +
 +<code javascript>
 +const lusca = require('lusca');
 +
 +app.use(lusca.csp({
 +    policy: {
 +        'default-src': '\'self\'',
 +        'style-src': '\'self\'',
 +        'img-src': '\'self\'',
 +    }
 +}));
 +</code>
 +
 +Puisqu'on parle de sécurité aussi avec AngularJS, on doit lui dire qu'on utilise les CSP:
 +
 +<code html>
 +<!DOCTYPE html>
 +<html ng-app="app" ng-csp>
 +    <!-- reste du fichier ignoré. -->
 +</code>
 +
 +jQuery charge des images avec ''data:image/png;base64'', donc dans ''policy'' on peut le permettre et plutôt mettre:
 +<code javascript>
 +        'img-src': '\'self\' data:',
 +</code>
 +
 +
 +===== Encrypter le trafic =====
 +
 +Pour encrypter le trafic entre le serveur Node et le client, il faut utiliser le HTTPS.
 +
 +Pour se faire, il faut créer un certificat, soit par une autorité pour la production, soit un [[:securite:openssl:toc#generer_un_certificat_auto-signe|certificat auto-signé]] pour le développement.
 +
 +Ensuite, il faut utiliser les modules ''https'' et ''fs'' de node.
 +
 +<code javascript>
 +const https = require('https');
 +const fs = require('fs');
 +
 +const options = {
 +    key: fs.readFileSync('./key.pem'),
 +    cert: fs.readFileSync('./cert.pem')
 +};
 +</code>
 +
 +Ensuite, au lieu du traditionnel ''app.listen()'', on utilise ''https.createServer(options, app).listen()''.
 +
 +<code javascript>
 +https.createServer(options, app).listen(port, function() {
 +    console.log('Express server listening on port ' + port);
 +});
 +</code>
 +
 +===== Autre méthode =====
 +
 +
 +XSS occurs when the attacker injects executable JavaScript code into the HTML response.
 +
 +To mitigate these attacks, you have to set flags on the set-cookie HTTP header:
 +
 +HttpOnly - this attribute is used to help prevent attacks such as cross-site scripting since it does not allow the cookie to be accessed via JavaScript.
 +secure - this attribute tells the browser to only send the cookie if the request is being sent over HTTPS.
 +
 +
 +===== Autres sujets =====
 +
 +  * NodeJS Key-vault secrets
 +
 +
 +
 +===== Ressources =====
 +
 +  * [[http://lollyrock.com/articles/nodejs-encryption/|Encrypt and decrypt content with NodeJS]]
 +  * https://github.com/nodesecurity/eslint-plugin-security
 +  * [[https://community.risingstack.com/writing-secure-node-js-code-danny-grander/|Writing Secure Node.js Code - Danny Grander]]
  
  
Ligne 62: Ligne 205:
   * [[https://github.com/node-inspector/node-inspector|node-inspector]]   * [[https://github.com/node-inspector/node-inspector|node-inspector]]
     * ''%%$ node-debug -p 3031 server.js%%''     * ''%%$ node-debug -p 3031 server.js%%''
 +  * https://github.com/darcyclarke/rawkit
 +
 +
 +===== Debugging avec NodeJS =====
 +
 +
 +
 +
 +  $ node --inspect hello.js
 +
 +Ceci permet d'arrêter l'exécution dès la première ligne:
 +
 +  $ node --inspect-brk hello.js
 +
 +CLI debugger:
 +
 +  $ node inspect hello.js
 +
 +
 +
 +Dans Chrome : ''about:inspect'' -> **Open dedicated DevTools for Node**.
 +
 +Fonctionne aussi avec ''%%chrome://inspect%%''.
 +
 +
 +Outils qui lancent Devtools:
 +  * june07.com/nim
 +  * github.com/jaridmargolin/inspect-process
 +  * github.com/darcyclarke/rawkit
 +
 +
 +
 +===== Autres outils =====
 +
 +  * [[https://github.com/GoogleChromeLabs/ndb|ndb]]
 +
 +
 +
 +
 +
 +
 +
  
 ====== CommonJS ====== ====== CommonJS ======
web/javascript/nodejs/toc.txt · Dernière modification : 2023/10/03 18:43 de sgariepy