As credenciais de autenticação nunca devem ser passadas via URL, sempre via Header. Você implementou assim:
http://localhost:6512/database/usuarios/getbyname/name=:nome&&senha=:senha
Desta forma qualquer atacante consegue facilmente pegar os dados de autenticação dos usuários via esta URL.
O correto seria enviar no Header, que depois com a request sendo encriptado via HTTPS não seria possível pegar estes dados. Assim:
curl -H “Authorization: Basic ENCRYPTED_CREDENTIALS” http://localhost:6512/database/usuarios/getbyname/name=:nome
O tratamento da autenticação na API deve usar um middleware, ou seja, uma função utilizada por todas as requests antes de processar a operação solicitada. Exemplo de alteração do código atual:
/****** MODULOS ******/
const express = require('express');
const app = express();
const users = require('./dataBase/controlers/users');
// Middleware de autenticação
const { authenticateApi } = require("./middleware");
// Setando como json
app.use(express.json());
// Rotas ALTERADO PARA INCLUIR MIDDLEWARE DE AUTENTICACAO
app.post('/database/usuarios/adicionar', authenticateApi, users.insert);
app.put('/database/usuarios/update/:id', authenticateApi, users.update);
app.get('/database/usuarios/getall', authenticateApi, users.findAll);
app.get('/database/usuarios/getbyname/name=:nome’,authenticateApi, users.login);
app.delete('/database/usuarios/delete/name=:nome', authenticateApi, users.delete);
// arquivo middleware/index.js
// Exemplo de middlware de autenticação
exports.authenticateApi = async (req, res, next) => {
try {
const authorization = req.headers.auhtorization || req.query.authorization;
var tmp = auth.split(' '); // Split on a space, the original auth looks like "Basic Y2hhcmxlczoxMjM0NQ==" and we need the 2nd part
var buf = new Buffer(tmp[1], 'base64'); // create a buffer and tell it the data coming in is base64
var plain_auth = buf.toString(); // read it back out as a string
console.log("Decoded Authorization ", plain_auth);
// At this point plain_auth = "username:password"
var creds = plain_auth.split(':'); // split on a ':'
var nome = creds[0];
var senha = creds[1];
var respose = await connection.query('SELECT * FROM users WHERE nome = ?', [nome]);
if (respose[0][0].senha != senha) return await res.json({ error : "senha incorreta"});
await res.json(respose[0]);
} catch (e) {
return res.status(401).json({
msg: "Failed to authenticate”,
});
}
};
As credenciais de autenticação nunca devem ser passadas via URL, sempre via Header. Você implementou assim:
http://localhost:6512/database/usuarios/getbyname/name=:nome&&senha=:senha
Desta forma qualquer atacante consegue facilmente pegar os dados de autenticação dos usuários via esta URL.
O correto seria enviar no Header, que depois com a request sendo encriptado via HTTPS não seria possível pegar estes dados. Assim:
curl -H “Authorization: Basic ENCRYPTED_CREDENTIALS” http://localhost:6512/database/usuarios/getbyname/name=:nomeO tratamento da autenticação na API deve usar um middleware, ou seja, uma função utilizada por todas as requests antes de processar a operação solicitada. Exemplo de alteração do código atual: