Uma avaliação do meu código [RESOLVIDO]

1. Uma avaliação do meu código [RESOLVIDO]

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 14/12/2021 - 05:19h

Olá, alguém poderia avaliar meu código, digo, com relação aseguraça se tá tudo ok?
Segue:

<?php
$maxScore = 100;
$maxSavedScore = 100000;
$hostname = "HOST";
$username = "USER";
$password = "SENHA AQUI";
$database = "NOME DB";

$conn = mysqli_connect($hostname, $username, $password, $database);
if ($conn->connect_error) {
die("Falha na conexão com o banco");
}

//verifica se é novo score
$player = mysqli_real_escape_string($conn, $_POST["player"]);
$points = mysqli_real_escape_string($conn, $_POST["points"]);
$query = "select player, points from highscores where player=\"$player\" and points=$points";
$result = mysqli_query($conn, $query);
if (mysqli_num_rows($result) != 0) {
//echo "Não é novo score\n";
return;
}

$query = "select count(id) from highscores";
$result = mysqli_query($conn, $query);
if (mysqli_num_rows($result) >= $maxSavedScore) {
$query = "delete from highscores where (select min(points) from highscores)";
$result = mysqli_query($conn, $query);
}

$query = "insert into highscores (player, points) values (\"$player\", $points)";
$result = mysqli_query($conn, $query);
mysqli_close($conn);
?>


Estou no momento aprendendo php, só por passa tempo.


  


2. MELHOR RESPOSTA

Cézar Augusto
cizordj

(usa Debian)

Enviado em 14/12/2021 - 09:11h

A lógica do seu código está OK, eu só diria para você tomar cuidado com o SQL injection porque você tá pegando os valores direto do usuário e colocando na consulta SQL, se isso for uma aplicação bastante usada pode ser uma falha na segurança.

Se você não vai usar nenhum framework no PHP (que no início é bom para aprender) eu sugiro usar as funções nativas para filtrar a entrada do usuário.

Dê uma olhada: https://www.php.net/manual/en/function.filter-input

Outra sugestão é fazer o uso de consultas parametrizadas no SQL

Veja um exemplo:
https://www.tutorialcup.com/interview/sql-interview-questions/parameterized-query.htm

Qualquer framework PHP usa esses recursos de segurança por padrão, mas para quem está começando no PHP é bom não usar nenhum para ver como funciona por baixo dos panos.

3. MELHOR RESPOSTA

leandro peçanha scardua
leandropscardua

(usa Ubuntu)

Enviado em 14/12/2021 - 21:01h


Olhando de relance os problemas que vi são:
1 - usuario e senha do banco direto no script - se acontecer um erro e não carregar mod_php todo mundo vai ver a senha e o nome do usuario.
2 - O script parece sujeito a sql injection - não testei, mas acho que se vc passar 1 OR campo01=4 já deve executar. Faz tempo q não uso mysqli deve ter problemas c ele também.
3 -Tem um alerta de segurança sobre charset na página da função mysqli_real_escape_string : https://www.php.net/manual/pt_BR/mysqli.real-escape-string.php

4. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 14/12/2021 - 23:43h

Boa noite Saml.
Sobre SQL Injection, com exemplos.
https://www.w3schools.com/sql/sql_injection.asp


______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________


5. Re: Uma avaliação do meu código [RESOLVIDO]

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 14/12/2021 - 21:55h


cizordj escreveu:

A lógica do seu código está OK, eu só diria para você tomar cuidado com o SQL injection porque você tá pegando os valores direto do usuário e colocando na consulta SQL, se isso for uma aplicação bastante usada pode ser uma falha na segurança.

Obrigado ai Cézar, vou ler com calma esses links e ajustar o código. No mais, é apenas um código simples pra teste, mas sem importância a não ser para aprendizado.

leandropscardua escreveu:
Olhando de relance os problemas que vi são:
1 - usuario e senha do banco direto no script - se acontecer um erro e não carregar mod_php todo mundo vai ver a senha e o nome do usuario.
2 - O script parece sujeito a sql injection - não testei, mas acho que se vc passar 1 OR campo01=4 já deve executar. Faz tempo q não uso mysqli deve ter problemas c ele também.
3 -Tem um alerta de segurança sobre charset na página da função mysqli_real_escape_string : https://www.php.net/manual/pt_BR/mysqli.real-escape-string.php


Opa, valeu Leandro, obrigao por dar essas dicas ai. Juro pra ti que a 1 eu tinha imaginado que poderiar dar problema, mas não foi algo assim que eu pensei que fosse importante, mas faz sentido o que tu disse.

Obrigado pessoal, vou ajeitar o código aqui com o que vocês disseram e melhorar onde puder. Mas se alguém tiver mais alguma observação a fazer, fique a vontade.


6. Re: Uma avaliação do meu código [RESOLVIDO]

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 15/12/2021 - 00:29h

msoliver escreveu:
Boa noite Saml.
Sobre SQL Injection, com exemplos.
https://www.w3schools.com/sql/sql_injection.asp

Valeu Marcelo! Eu conheço pouco de sql injecion, é mais na teoria que na prática, agora que tô indo pra prática depois de anos programando rsrsrs
Tá sendo muito divertido descobrir essas coisas novas que antes eu não ligava tanto.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts