Jump to content


Photo

problema con foreach


  • Please log in to reply
No replies to this topic

#1 jonbra

jonbra

    Advanced Member

  • Miembros
  • PipPipPip
  • 57 posts

Posted 07 June 2013 - 05:21 AM

estoy trabajando en un validador, el primer paso consiste en que verifique si el usuario y el email introducidos contienen sql injection, por lo que primero instancio la clase y la reproduzco así

controlador.php
-

function validar($usuario, $email, $passwd, $passwd2, $nombre)
{
//creo una instancia para obtener un usuario, una contraseña y un email existentes
$usuario_class = new Validar($usuario, $email, $passwd, $passwd2);

//compruebo que el usuario no contiene sql injection
$validar_usuario = $usuario_class->seguridad_patrones();
foreach($validar_usuario as $informe)
{

echo $informe ['usuario']. "<br>"; //esta es la línea 316
echo $informe ['email']; //esta es la línea 317
}
}



en la clase tengo el siguiente código



class Validar extends Conectar
{
///////////////////////////
//declaro las variables
///////////////////////////

//variables que contienen los valores que el usuario introduce
private $usuarioc;
private $emailc;
private $passwdc;
private $passwd2c;

//arrays que contienen la consulta en base de datos
// y la salida según la validación (true o false)
private $arr = array();
private $salida = array();

//variables para devolver si el usuario, email, passwd y passwd2
//son correctos según comprobación anti sql injection
private $validar = array();

//resultados de la búsqueda con los patrones en los parámetros
private $res;
private $res2;
private $res3;
private $res4;
private $res5;

//////////////////////////////////////////
//patrones para buscar palabras prohibidas
//////////////////////////////////////////

//patrones para evitar email injection
private $seguridad_email =
array(
"Content-Type:",
"MIME-Version:",
"Content-Transfer-Encoding:",
"Return-path:",
"Subject:",
"From:",
"Envelope-to:",
"To:",
"bcc:",
"cc:",
);

//patrones para evitar sql injection
private $seguridad_sql =
array (
"UNION",
"DELETE",
"DROP",
"SELECT",
"INSERT",
"UPDATE",
"CRERATE",
"TRUNCATE",
"ALTER",
"INTO",
"DISTINCT",
"GROUP BY",
"WHERE",
"RENAME",
"DEFINE",
"UNDEFINE",
"PROMPT",
"ACCEPT",
"VIEW",
"COUNT",
"HAVING",
"'",
'"',
"{",
"}",
"[",
"]",
);
//patrones para evitar direcciones web
private $seguridad_url =
array (
"HOTMAIL",
"WWW",
".COM",
"@",
"W W W",
". c o m",
"http://",
);
//patrones para evitar variables y comodines
private $seguridad_varcom =
array("$",
"&",
"*",
);

//aplico el constructor que recibe los parámetros del usuario
public function __construct( $usr, $emil, $paswd, $paswd2 )
{
$this->usuarioc = $usr;
$this->emailc = $emil;
$this->passwdc = $paswd;
$this->passwd2c = $paswd2;
}

//primero reviso los parámetros asegurando que no contengan sql injection

//valido el usuario contra sql injection
public function seguridad_patrones()
{
//reviso el usuario
$this->res = stripos ( $this->usuarioc , "FROM:");
if ( $this->res === false )
{
$this->validar['usuario'] = "usuario no contiene sql injection";
}
else
{
$this->validar['usuario'] = "usuario contiene sql injection";
}

//reviso el email
$this->res2 = stripos ( $this->emailc , "FROM:" );
if ( $this->res2 === false )
{
$this->validar['email'] = "email no contiene sql injection";
}
else
{
$this->validar['email'] = "email contiene sql injection";
}

//retorno el array validar para imprimirlo en pantalla a través del controlador.php
return $this->validar;

}
}


me devuelve los siguientes errores



las líneas 316 y 317 están indicadas en el documento controlador.php

no entiendo el problema, puesto que he leido sobre este problema y me dice que se debe a que a partir de php 5.4 hay que indicar los indicadores de los arrays con enteros o string de entero, entonces hice lo siguiente tanto en el código del controlador como en el de la clase



//en el controlador cambié los indicadores 'usuario' e 'email' por [1] y [2] respectivamente

foreach($validar_usuario as $informe)
{

echo $informe [1]. "<br>";
echo $informe [2];
}

//en la clase hice lo mismo

public function seguridad_patrones()
{
//reviso el usuario
$this->res = stripos ( $this->usuarioc , "FROM:");
if ( $this->res === false )
{
$this->validar[1] = "usuario no contiene sql injection";
}
else
{
$this->validar[1] = "usuario contiene sql injection";
}

//reviso el email
$this->res2 = stripos ( $this->emailc , "FROM:" );
if ( $this->res2 === false )
{
$this->validar[2] = "email no contiene sql injection";
}
else
{
$this->validar[2] = "email contiene sql injection";
}

return $this->validar;
//reviso el passwd

}


no me devuelve ningún error pero me devuelve solo esto

s
um
a


no entiendo de qué cadena sale eso, pero no lo tengo en ninguna cadena.

¿alguien me puede ayudar?

gracias!

  • 0




IP.Board spam blocked by CleanTalk.