Proteger um sistema de coins

Eu tenho um projeto em react onde tenho que fazer uma loja, isso leva a fazer um sistema de coins.
Meu back end é uma api em php e eu tenho que criar uma rota para adicionar coins pelo front end.

Então seria algo assim:
/api/coins/add.php?quantity=1&user=1

O problema é: fazendo desse jeito, qualquer um poderia adicionar quantos coins quisesse na própria conta, dando uma olhadinha no devtools e colocando essa url no navegador.

Como poderia evitar isso, ou seja, criar um algoritimo pra proteger esse sistema?

Em vez de passar o id do usuário dessa forma, vc poderia recuperar da sessão ou do token (se for o caso). Dessa forma, apenas seria possível informar o usuário caso ele estivesse autenticado.

Em relação à quantidade, existe algum critério, como por exemplo, um pagamento que precisaria ser feito? Se sim, vc poderia incluir a quantidade na conta do usuário apenas se o pagamento fosse reconhecido, por exemplo.

Essa da autenticação dos tokens é boa.
Eu tô usando jwt pra autenticar e guardo ele em um cookie, então, pelo sistema de jwt q eu fiz, bastava o usuário pegar esse cookie e recria-lo ao acessar o add.php pelo navegador.

Então eu pensei: quando um usuário acessa a url pelo navegador, a header Origin é preenchida com o ip dele? Neste caso era só eu bloquear, especificando que a unica Origin permitida seria a do domínio do meu projeto. Mas eu não sei se essa teoria tá certa

O usuário não recria o token quando a requisição para add.php for feita. O token é apenas passado no header. O que seu sistema vai fazer é verificar se o token é válido. Se for válido, o sistema vai decodificar o token e recuperar a informação que identifica o usuário que tem nele. Depois só realizar a lógica dos coins.

Isso é interessante, pq caso alguém tente fazer alguma requisição fora do seu domínio para add.php, já será bloqueado pelo CORS.

1 curtida

Sim, mas o que eu quis dizer é que isso poderia ser burlado copiando o cookie, tipo: eu deixo o token guardado no cookie auth, então era só o cara entrar na /api/coins/add.php, escrever um cookie auth pelo javascript, pegar o token do cookie original e usar nesse novo cookie.

Agora q eu pensei, acho que daria pra usar aquele prefixo __Host no cookie pra não permitir que seja manipulado pelo javascript, mas eu não sei se essa manipulação também inclui a criação dele. Pra isso eu precisaria de um ssh, mas não consegui “ativar” o certificado no windows, será q vc tem algum tutorialzinho ou tópico sobre isso ai?