Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá
Fiz um site e ao pôr online, depois de duas semanas ele foi "hackeado"/"exploited".
Uso MySQLI para me conectar pelo banco de dados e descobri que é só quando eu uso
"SELECT * FROM"
e eu uso a variável, que o exploit se "instala".
Como no seguinte código:
$sql4 = mysqli_query($con, "SELECT * FROM ... WHERE ... != '1' ORDER BY RAND() LIMIT 1") or die(mysqli_error($con));
$ln4 = mysqli_fetch_assoc($sql4);
$teste = $ln4['teste'];
Quando eu coloco "echo" na variável $teste, o exploit "começa".
Mas se eu não me conectar com o banco de dados, o exploit não funciona.
Há como evitar isso?
Não uso prepared statement, se eu usá-lo, não poderá mais ser hackeado?
Como posso eviar isso?
Conto com a ajuda de todos.
Desde já agradeçoEu nem estou dando POST para pegar os resultados, pois estou quero listar todos os resultados do DB.
Dessa forma, eu não preciso usar.
Mas o problema é quando eu uso mysql ou mysqli, aí entra a tela de exploit:
Usei o seguinte código com prepared statement:
<?php
$idDif="1";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
$link = new PDO("mysql:host=$host;dbname=$db", "$user", "$pass", $options);
$stmt = $link->prepare("SELECT * from `teste` WHERE idTeste!=?");
$stmt->execute([$idDif]);
$result = $stmt->fetchAll();
foreach ($result as $row):
?>
<h2 style="text-align:center;margin:0 auto">
<?=$row["nomeTeste"]?>
</h2><div>
<p>
<?=$row["valorTeste"]?>
</p>
<hr style="color:black;width:10%"/>
</div>
<?php endforeach;?>
e mesmo assim, o exploit continua.
Não sei como fizeram para inserir dados no servidor e quando eu acesso meu banco de dados ele bloqueia.
Como posso resolver?pode ser que seja suspeita de invasão ou de site malicioso ou pode ser seu ip que tá bloqueado, tem um site que controla isso e se for esse o caso tu pode solicitar desbloqueio clicando num link que aparece na tela nesses caso mas tem que ter certeza se é isso porque se tiver um link malicioso ferra mais ainda
Eu tenho certeza que foi hackeado.
Está escrito: "Hacked by CyberTeam"
Não foi hackeado. Se está exibindo apenas quando você retorna no banco de dados, apenas está no seu banco de dados.
O nome disso é XSS, você precisa retirar os códigos antes de salvar algo no banco de dados.
Você tento usar uma fuction SQL FILTER
function SqlFilter($str)
{
if (!is_numeric($str)) {
// você usa
$nome = SqlFilter($_POST["nome"]);
// ou tenta