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

iniciopublic Seguir

Préstamo
Pi
Verificación en dos pasos activada
Verificado por Whatsapp
Desde
16 Jul 2013
Mensajes
5.063
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
 

victorvu

Beta
Programador
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
24 Feb 2013
Mensajes
118
en cualquier consulta que hagas a la base de datos puede inyectar codigo, si queres evitarlo la manera facil es usar PDO

saludos
 

Alan98

Beta
Social Media
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
12 Dic 2012
Mensajes
118
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:

zcriptz

1
Ómicron
Programador
Verificación en dos pasos activada
Verificado por Whatsapp
Suscripción a IA
Desde
26 Mar 2013
Mensajes
4.621
Solo agrega mysql_real_escape_string() a los $_POST y $_GET que vayan a una consulta MySQL
 

victorvu

Beta
Programador
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
24 Feb 2013
Mensajes
118
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
 

kronenmix

Beta
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
4 Sep 2010
Mensajes
49
Ahí no hay ningún acceso a base de datos...
 

iniciopublic

Préstamo
Pi
Verificación en dos pasos activada
Verificado por Whatsapp
Desde
16 Jul 2013
Mensajes
5.063
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];
}
?>
 

Alan98

Beta
Social Media
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
12 Dic 2012
Mensajes
118
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.
 

kronenmix

Beta
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
4 Sep 2010
Mensajes
49
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.
 

Zentido

Iota
Programador
Verificación en dos pasos activada
Desde
17 Jul 2012
Mensajes
2.253
No uses mysql_query ya es deprecated! usa mysqli o pdo
Saludos :encouragement:
 

kronenmix

Beta
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
4 Sep 2010
Mensajes
49
Bueno, ese código NO es vulnerable a inyección SQL, puedes apostar todo tu dinero en ello :p

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.
 

Derjay

1
Delta
Verificación en dos pasos activada
¡Ha verificado su Paypal!
Suscripción a IA
Desde
4 Mar 2014
Mensajes
709
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
 
Arriba