¿como uno sabe cuando un codigo esta desprotegido de inyecciones?

  • Autor Autor iniciopublic
  • Fecha de inicio Fecha de inicio
iniciopublic

iniciopublic

Préstamo
Ómicron
Verificación en dos pasos activada
Verificado por Whatsapp
Hola a todos , tengo este codigo , ¿como puedo saber si es vulnerable a inyecciones mysql y como podria portegerlo de eso?
esto es un sistema de login
PHP:
function top()
{
echo("<form action=admin.php method=post><center><br><h2>Admin Login</h2><br>Enter your admin password:<br><br><br><input type=password name=admin><input type=Submit value=Login style=\"color: #000000; font-size: 10pt; font-family: Verdana; font-weight: bold; border: 1px ridge #000000; background-color: B0D8DD\"></form>");
  return 1;
} ?>
<?
if (!isset($_SESSION["admin_session"]))
{

  if ($_POST) {
		$a=$_POST["admin"];
	} else {
		$a="";
		echo 'no hay datos';
		}

  if ($a=="")
  {
  echo'no hta datos';
top();
  }
    else
  {
    if ($a!=$adminpass)
    {
echo 'noi';
top();
    }     else
    {
      $_SESSION[admin_session]=$adminpass;
process();
    }
  }
}
else {
process();
}


Les agradezco su pronta respuesta


saludos
 
en cualquier consulta que hagas a la base de datos puede inyectar codigo, si queres evitarlo la manera facil es usar PDO

saludos
 
No hay nada de MySQL en tu código, por lo tanto no se pueden hacer inyecciones SQL. Aunque desconozco lo que realiza la función process();

en cualquier consulta que hagas a la base de datos puede inyectar codigo, si queres evitarlo la manera facil es usar PDO

saludos

No necesariamente, si está correctamente protegido cómo inyectarían código? Además PDO también hace consultas a la base de datos; es sólo una extensión de PHP que permite utilizar distintos drivers de MySQL. Sólo abstrae el acceso a datos, pero utiliza las mismas funciones para realizar consultas, obtener datos, etc.
 
Última edición:
Solo agrega mysql_real_escape_string() a los $_POST y $_GET que vayan a una consulta MySQL
 
No hay nada de MySQL en tu código, por lo tanto no se pueden hacer inyecciones SQL. Aunque desconozco lo que realiza la función process();



No necesariamente, si está correctamente protegido cómo inyectarían código? Además PDO también hace consultas a la base de datos; es sólo una extensión de PHP que permite utilizar distintos drivers de MySQL. Sólo abstrae el acceso a datos, pero utiliza las mismas funciones para realizar consultas, obtener datos, etc.

No comente viendo el codigo sino lo que el preguntaba y prepared statements PDO protege de inyecciones
 
Ahí no hay ningún acceso a base de datos...
 
Ahí no hay ningún acceso a base de datos...

hola ,este es el codigo que va arriba del primero que mostre :
PHP:
<?php
session_start();
session_register("admin_session");
session_register("totalusercount_session");
session_register("usercount_session");
include "config.php";


ahora el config.php esta es la conexion

PHP:
$dbhost="localhost";
$dbname="xxxxxxx";
$dbuser="ixxxxxxxx";
$dbpass="xxxxxx";

//Don't change the below 2 lines
  $dbconnect=mysql_connect($dbhost,$dbuser,$dbpass);
  mysql_select_db($dbname);

$rs=mysql_query("select * from adminsettings");
if(mysql_num_rows($rs)>0) {
$arr=mysql_fetch_array($rs);
$sitename=$arr[0];
$siteurl=$arr[1];
$webmasteremail=$arr[2];
$adminpass=$arr[3];

$alertpay=$arr[4];

$fee=$arr[7];

$levels=$arr[8];

$level1=$arr[9];
$level2=$arr[10];
$level3=$arr[11];
$level4=$arr[12];
$level5=$arr[13];
$level6=$arr[14];
$level7=$arr[15];
$level8=$arr[16];
$level9=$arr[17];
$level10=$arr[18];

$forcedmatrix=$arr[19];
$membershipperiod=$arr[20];
$signupbonus=$arr[21];
}
?>
 
hola ,este es el codigo que va arriba del primero que mostre :
PHP:
<?php
session_start();
session_register("admin_session");
session_register("totalusercount_session");
session_register("usercount_session");
include "config.php";


ahora el config.php esta es la conexion

PHP:
$dbhost="localhost";
$dbname="xxxxxxx";
$dbuser="ixxxxxxxx";
$dbpass="xxxxxx";

//Don't change the below 2 lines
  $dbconnect=mysql_connect($dbhost,$dbuser,$dbpass);
  mysql_select_db($dbname);

$rs=mysql_query("select * from adminsettings");
if(mysql_num_rows($rs)>0) {
$arr=mysql_fetch_array($rs);
$sitename=$arr[0];
$siteurl=$arr[1];
$webmasteremail=$arr[2];
$adminpass=$arr[3];

$alertpay=$arr[4];

$fee=$arr[7];

$levels=$arr[8];

$level1=$arr[9];
$level2=$arr[10];
$level3=$arr[11];
$level4=$arr[12];
$level5=$arr[13];
$level6=$arr[14];
$level7=$arr[15];
$level8=$arr[16];
$level9=$arr[17];
$level10=$arr[18];

$forcedmatrix=$arr[19];
$membershipperiod=$arr[20];
$signupbonus=$arr[21];
}
?>
No, no es vulnerable a SQLi. La única consulta que hay es una recuperando datos de una tabla, en ningún lado se pasan datos del cliente dentro de la consulta.
Saludos.
 
Bueno, los problemas de inyeccion SQL vienen cuando pasas directamente como parámetros para consultas SQL alguna variable que venga de $_GET o $_POST
En eso que me indicas no habría inyección posible.

Recomiendo que uses siempre mysql_real_escape_string() a cada variable que provenga de get o post que quieras introducir en las consultas.
 
No uses mysql_query ya es deprecated! usa mysqli o pdo
Saludos :encouragement:
 
Bueno, ese código NO es vulnerable a inyección SQL, puedes apostar todo tu dinero en ello 😛

Para tener posibilidad de ser vulnerable a inyección SQL, es imprescindible que la consulta SQL incluya variables que provengan desde entradas $_GET, $_POST, $_REQUEST, etc, y no es tu caso.

Saludos.
 
Asegurate de validar tanto de lado del cliente como del servidor con expresiones regulares, para mí es la mejor práctica a la hora de evitar inyecciones sql y obtener datos más confiables por parte de los usuarios
 
No entendí nada jeje, en que consiste una inyección??

Enviado desde mi XT1032 mediante Tapatalk
 
Atrás
Arriba