Iloo

https://iloo.wordpress.com

PHP: tips, limpiar el codigo

0fd309979dce4933f1ae8fc364a9febe

Si bien los mensajes de tipo warning o notice no causando problemas “reales” en el funcionamiento de una aplicación o al menos la mayoría piensa eso, la realidad es que si causan problemas y bastante serios.

En primer lugar para cualquier aplicación se tiene que habilitar el registro de logs, la importancia de eso lo dejo para otro post, cuando este archivo es demasiado grande (experiencia propia) ocasiona que el servidor y por tanto la aplicación funcionen mas lentos de lo normal. A demás es una de las razones para el famoso 500 Internal Server Error.

Algunas alertas comunes son las siguientes:

PHP Notice: Undefined index: var1 in …

Obviamente se esta buscando el index en un array o una variable enviada por get o post que no existe.

por ejemplo este error se reproduciria de la siguiente manera:

$var_array = array('var2' => 2, 'var3' => 3);
echo $var_array['var1'];

O el mas común que el archivo espere recibir datos enviados mediante get o post y que estos no hayan sido enviados. Por ejemplo:

if($_GET['var1'])
  echo 'yes';

Si var1 no fue enviada por el método get en este caso produciría la alerta.

Para esto es mejor verificar antes si la variable esta “seteada”

if(isset($_GET['var1']) && $_GET['var1'])
  echo 'yes';

PHP Notice: Undefined variable: var2 in …

Muchas veces vi que código de esta manera:

if ($a == 1)
  $b = 2;
echo $b;

Pero en el caso que la variable $a sea igual a 2 entonces la variable $b nunca seria inicializada, una solución es definir la variable antes:

$b = 0;
if ($a == 1)
  $b = 2;
echo $b;

Esto también pasa cuando se usa un array sin haber sido inicializado, por ejemplo:

foreach($orders as $order)
  $var_array[] = $order;
print_r($var_array);

La solución seria tan simple como definir la variable antes de usarla.

$var_array = array();
 foreach($orders as $order)
 $var_array[] = $order;
print_r($var_array);

PHP Notice: Use of undefined constant var3 – assumed ‘var3’ in …

Este es un clásico, la regla es: si el index de un array es un entero no se necesita comillas, si es una cadena si necesita comillas.

echo $array[0]; // bien
echo $array['0']; // bien
echo $array['index']; // bien
echo $array[index]; // MAL

PHP Notice: A session had already been started – ignoring session_start() in …

Si la sesion ya ha sido iniciada no es necesario volver a iniciarla. Si uno no esta seguro de haber iniciado la sesión mejor verificar antes de iniciarla:

if(!isset($_SESSION)) 
  session_start();

Estos son algunas sugerencias para arreglar y limpiar los warnings y notices en el log de php.

Web Applications Security: Coteor (2)

Yendo un paso más allá, teniendo el acceso al modem, también se puede ver la línea telefónica  a la que pertenece la red wireless:

coteor4

Coteor usa la línea telefónica como el username, por tanto se puede conocer la dirección exacta de donde se encuentra la red wireless, para esto se puede buscar en la guía telefónica o usar el servicio que provee www.oruroweb.com.

Una vez teniendo las direcciones, mediante el API de Google maps se puede señalar donde se encuentra cada red, aquí un pequeño ejemplo de algunas redes disponibles:

coteor5

Web Applications Security: Coteor (1)

Tengo esta entrada pendiente desde hace un par de años este tema es bastante delicado y esta relacionado al acceso a los equipos modem ADSL proporcionados por Coteor.

Pero contando un poco la historia, después de firmar el contrato de Internet ADSL y esperar un día viene a mi hogar la persona encargada de la instalación del modem, esta persona instala y configura el dispositivo, después le pregunto si podría darme el acceso al modem (ZyXEL P-660HN-T1A) para poder realizar algunas configuraciones extras, cambiar el SSID, contraseñas, hablitar servicios HTTP, FTP, etc, tal persona me indica que no puede darme ese dato y si necesito algún servicio extra tendría que contactarme con Coteor y ellos analizarían el tema.

Una vez se retira el técnico procedo a obtener la contraseña de acceso al router, tal contraseña no es algo difícil de obtener, se pueden obtener las contraseñas de todos los routers entregados por Coteor.

Luego usando nmap se puede realizar un mapeo, de los equipos conectados en la red:

nmap -sP 200.110.51.1-255

*Mapeando solo el ultimo octeto.

Y se obtiene una respuesta de este tipo:

Nmap scan report for 200.110.51.3
Host is up (0.076s latency).
Nmap scan report for 200.110.51.9
Host is up (0.085s latency).
Nmap scan report for 200.110.51.13
Host is up (0.078s latency).
Nmap scan report for 200.110.51.14
...

Probando la dirección 200.110.51.14:

coteor1

Y en la mayoría de los hosts se tendrá el mismo resultado, probando con la contraseña:

coteor2

Y también se tiene la contraseña de la red wireless:

coteor3

Esto no sucedería si Coteor brindara la contraseña de acceso al modem ya que en este caso sería el usuario el responsable de la seguridad de su red, responsable de usar una contraseña segura para su modem, pero como este no es el caso, Coteor sería el único responsable de la seguridad de las redes de los usuarios.

Ruby on Rails: RVM is not a function

Ruby_on_Rails_logo

Los detalles:

  • CentOS 6
  • RVM
  • Rails 1.9.3

Los pasos.

  1. Instalación RVM, todo correcto.
  2. Instalación ruby 1.9.3, todo correcto.

En la aplicación instalación de gemas y demás:

bundle install

Your Ruby version is 2.1.0, but your Gemfile specified 1.9.3

Cambiar la versión de ruby usada en rvm:

rvm use 1.9.3

RVM is not a function, selecting rubies with ‘rvm use …’ will not work.

La solución, cambiar la shell por defecto:

chsh -s /bin/bash usuario

Yo: cosas que odio

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 34 seguidores