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
-
Código PHP:
Ver originalfunction 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
Código PHP:
Ver originalclass 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 $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 =
"Content-Type:",
"MIME-Version:",
"Content-Transfer-Encoding:",
"Return-path:",
"Subject:",
"From:",
"Envelope-to:",
"To:",
"bcc:",
"cc:",
);
//patrones para evitar sql injection
private $seguridad_sql =
"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 =
"HOTMAIL",
"WWW",
".COM",
"@",
"W W W",
". c o m",
"http://",
);
//patrones para evitar variables y comodines
private $seguridad_varcom =
"&",
"*",
);
//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";
}
return $this->validar;
//reviso el passwd
}
}
me devuelve los siguientes errores Cita: Warning: Illegal string offset 'usuario' in C:\xampp\htdocs\xampp\web\poo\controlador.php on line 316
u
Warning: Illegal string offset 'email' in C:\xampp\htdocs\xampp\web\poo\controlador.php on line 317
u
Warning: Illegal string offset 'usuario' in C:\xampp\htdocs\xampp\web\poo\fcontrolador.php on line 316
e
Warning: Illegal string offset 'email' in C:\xampp\htdocs\xampp\web\poo\controlador.php on line 317
e
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
Código PHP:
Ver original//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
no entiendo de qué cadena sale eso, pero no lo tengo en ninguna cadena.
¿alguien me puede ayudar?
gracias!