Herramientas

Sección de Herramientas para pruebas, testing, administracion, entre otras.

Wordfence Security un puglin de Seguridad para su Web en WordPress.

Hola Colegas!

Comparto el siguiente post para los que desean reforzar su seguridad de su Sitio en WordPress

Wordfence el plugin de wordpress que te puede librar de muchos dolores de cabeza!, este plugin es un plugin de seguridad bastante efectivo para tu sitio de WordPress, el mismo ofrece una serie de opciones y/o características disponibles que monitorizan, escanean compara los archivos modificados por atacantes contra los originales liberados por la comunidad de WordPress, bloquea ataques, muestra tráfico online, entre otros.

Wordfence cuenta con dos modalidades la Free disponible para tu Sitio Web y la de pago para antispam y publicidad no deseada.

Comparto algunas pantallas y el link para que lo instalen en su sitio Web y puedan prevenir algun desastre en su Sitio Web.

Más información: http://www.wordfence.com/learn/

Sobre Seguridad.

Hola, Colegas,

Recientemente liberaron una nueva versión del sistema operativo llamado Kali Linux 2016.2, una distribución de Linux en Debian ( código abierto ) diseñado para ayudar a los hackers éticos y profesionales de la seguridad con una amplia gama de herramientas para pruebas de penetración , análisis,  piratería. Todo esto en un solo paquete.

De manera que antes de liberar el desarrollo de tu sitio Web lo puedes someter a pruebas de seguridad, garantizando una mejor calidad en el producto que vas a entregar.

Tambien puedes instalarlo en una maquina virtual y crear tu propia herramienta de Testing.

Para mas información puedes visitar el sitio https://www.kali.org/kali-linux-documentation/  y para descargar el ISO en https://www.kali.org/downloads/ 

Como programar una tarea automática FTP en nuestro PC en 4 Pasos (Backup FTP)

Hola amig@s!

Comparto una interesante forma de programar una tarea automática en nuestro PC, para respaldar nuestros sitios Web o sincronizar cambios recientes realizados en nuestro archivos HTML. PHP, entre otros;  ya sea de forma remota a nuestro local o viceversa. aunque existen muchas formas y documentacion de hacer esto, yo les comparto mi ejemplo.

Para el siguiente POST voy a indicar los pasos para descargar desde el servidor a nuestra máquina local. Esto nos funciona como una tarea de respaldo.

Paso 1: Instalar un programa llamado WinSCP ( https://winscp.net/eng/download.php  )

Paso 2: Elaborar un script puede ser un .txt que debe llevar las instrucciones de lo que queremos realizar: si el descargar ( download) o el subir (upload), recuerda crear un standard del nombre del script para identificar si tienes varias tareas o varios sitios que sincronizar, las instrucciones básicas de nuestro script.txt deben ser las siguientes:

##
# Script para sincronizar los Archivos Remotos a Nuestro LOCAL DIR.
# En caso de existir cambios actualiza nuestra copia LOCAL con los cambios realizados.
##

option batch abort
option confirm off
# Si deseamos excluir de nuestro proceso alguna ruta o archivos colocamos 
# la siguiente instruccion:
option exclude /var/www/html/[nombre_de_carpeta]/*

# Establecemos la conexion con nuestro Server (  recuerda cambiar los parentesis cuadrados por tus valores)
open sftp://[usarioFTP]:[claveFTP]@[IP_DEL_SERVER_NOMBRE_DOMINIO] -hostkey=""

# Establecemos la sincronizacion con nuestro Server ( recuerda cambiar los parentesis cuadrados por tus valores)
synchronize local C:\DOCUMENTOS\[DIRECTORIO_LOCAL_SITIOS_WEB]\[DOMINIO]\ /var/www/html/
exit;

Paso 3: Confeccionar un archivo .bat con el nombre que gustes, solo recuerda el standard para identificar que pertenece al dominio respectivo. Lomejor es que su archivo .txt y su archivo .bat lleven el mismo nombre pasa asociarlos con la tarea automática. Las instruccciones del archivo .bat deberia ser las siguientes:

cls
echo "Sincronizando Archivos de mi Sitio mauricioAlpizar.com a mi LocalPC"
C:\DOCUMENTOS\util\winscp.exe /console /script="C:\DOCUMENTOS\util\WinSCP\mauricioalpizarRemoto2Local.txt"
pause

Paso 4: En su Windows y depende de la version, debes buscar el Task Scheduler  y agendar la periodicidad de la tarea automatica, esta configuración es muy sencilla porque por si solo el windows es muy intuitivo, lo que debes saber es que el action del  “Task Scheduler” debe ser la dirección de tu archivo .bat, que a su vez este llama al .txt para ejecutar la sincronización respectiva

Con estas instrucciones ya puedes tener tu propio BackUp en tu PC.

Buena Suerte!.

Validar mi sitio Web

Hola Colegas!.

Comparto con ustedes una muy buena herramienta para validar el website que estamos construyendo y obtener una calificación general de desempeño, la herramienta valida los siguientes aspectos:4-variables-WebSite GraderPor último proporciona las recomendaciones y pasos a seguir o lo que debes a hacer para aumentar la calificación gneral del Sitio Web.

Recurso: https://website.grader.com

Suerte.

Validar Correos Electrónicos de nuestros usuarios y/o clientes.

Hola Colegas!

Muchas veces cuando desarrollamos sistemas de información entre las funcionalidades primordiales del sistema es levantar un formulario de inscripción “el famoso proceso de registro” y el correo electrónico se convierte en el primer canal de comunicación entre nuestro sistema y el cliente, es importantísimo validar si el dato “email” brindado por el cliente verdaderamente existe.

Supongamos que nuestro sistema es un sistema de CRM ( Customer Relationship Management) y usualmente lo usamos para enviar notificaciones a nuestros prospectos y/o clientes, promociones, entre otros. Previo a este proceso de gestión podríamos aplicar un procedimiento de “aseguramiento de calidad”, es decir, que antes de registrar a nuestro cliente, persona contacto y/o usuario; dentro del proceso de registrar los datos podríamos validar si verdaderamente el buzón existe, pues bien! aquí les comparto una excelente herramienta que pueden incorporar a sus sistemas para que su comunicación sea más efectiva y no se dé cuenta que el correo registrado no existe o está malo en un proceso POST, y si no más bien en paso previo para aumentar la efectividad de comunicación.

Herramienta: http://verify-email.org/

API:http://verify-email.org/using-api.html

Buena Suerte!.

Ejemplo de como enviar arreglo Multidimensional Para NuSOAP

Hola Colegas!

Gracias a la consulta de una de mis visitantes, les comparto el ejemplo de como enviar un vector ó arreglo multidimensional con nusoap y que nuestro servicio (webService) lo pueda procesar, es muy similar al ejemplo que compartí anteriormente, únicamente con pequeñas variaciones.

Le vamos a enviar lo siguiente ( arreglo multidimensional):

	
$personas = array();
$personas[1] =  array('cedula' => '123A', 'nombre' => 'Juan',	'FechaNacimiento'	=> 1965);
$personas[2] =  array('cedula' => '123B', 'nombre' => 'Marcos',	'FechaNacimiento' 	=> 1980);
$personas[3] =  array('cedula' => '123C', 'nombre' => 'Pedro',	'FechaNacimiento' 	=> 1990);
$personas[4] =  array('cedula' => '123D', 'nombre' => 'Ana',	'FechaNacimiento'	=> 1995);
$personas[5] =  array('cedula' => '123F', 'nombre' => 'Maria',	'FechaNacimiento'	=> 1972);


Del lado del server nuestro código seria el siguiente:

<?php

// incluimos la libreria ó toolkit nusoap que descargamos previamente
require_once('lib/nusoap.php');

$server = new nusoap_server();

$server->configureWSDL('Mi Web Service', 'urn:mi_ws1');

// Parametros de entrada
$server->wsdl->addComplexType(  'datos_persona_entrada', 
                                'complexType', 
                                'struct', 
                                'all', 
                                '',
                                array('cedula'  		 	=> array('name' => 'cedula','type' => 'xsd:string'),
                                      'nombre'    			=> array('name' => 'nombre','type' => 'xsd:string'),
                                      'FechaNacimiento' 	=> array('name' => 'FechaNacimiento','type' => 'xsd:string'))
);
// Parametros de Salida
$server->wsdl->addComplexType(  'datos_persona_salida', 
                                'complexType', 
                                'struct', 
                                'all', 
                                '',
                                array('mensaje'   => array('name' => 'mensaje','type' => 'xsd:string'))
);


$server->register(	'calculo_edades', // nombre del metodo o funcion
					array('datos_persona_entrada' => 'tns:datos_persona_entrada'), // parametros de entrada
					array('return' => 'tns:datos_persona_salida'), // parametros de salida
					'urn:mi_ws1', // namespace
					'urn:hellowsdl2#calculo_edades', // soapaction debe ir asociado al nombre del metodo
					'rpc', // style
					'encoded', // use
					'La siguiente funcion recibe un arreglo multidimensional de personas y calcula las Edades respectivas segun la fecha de nacimiento indicada' // documentation,
					 //$encodingStyle
);


function calculo_edades($datos) {

	$msg = '';	
	// Recorro el arreglo de datos enviados
	foreach ($datos as $key => $value){
		
		$edad_actual = date('Y') - $value['FechaNacimiento'];
		$msg .= 'La edad de '. $value['nombre'] .' es:' . $edad_actual . ' años ==== <br />'; 
	}
	
	return array('mensaje' => $msg);
}

$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
?>

Para consumir el servicio en PHP el código sería el siguiente:

<?php

	require_once('lib/nusoap.php');
	
	$personas = array();
	$personas[1] =  array('cedula' => '123A', 'nombre' => 'Juan',	'FechaNacimiento'	=> 1965);
	$personas[2] =  array('cedula' => '123B', 'nombre' => 'Marcos',	'FechaNacimiento' 	=> 1980);
	$personas[3] =  array('cedula' => '123C', 'nombre' => 'Pedro',	'FechaNacimiento' 	=> 1990);
	$personas[4] =  array('cedula' => '123D', 'nombre' => 'Ana',	'FechaNacimiento'	=> 1995);
	$personas[5] =  array('cedula' => '123F', 'nombre' => 'Maria',	'FechaNacimiento'	=> 1972);
	
	
	$cliente = new nusoap_client('http://www.mauricioalpizar.com/ejemplos/nusoap/ce_server.php');
	//print_r($cliente);
	
	$datos_persona_entrada = array( "datos_persona_entrada" => $personas);

	$resultado = $cliente->call('calculo_edades',$datos_persona_entrada);
	
    print_r($resultado);
	
?>

URL para probar el resultado del código anterior:

http://www.mauricioalpizar.com/ejemplos/nusoap/ce_cliente.php

WSDL del WebService: http://www.mauricioalpizar.com/ejemplos/nusoap/ce_server.php?WSDL

Buena Suerte!!!.


					
				
	

WebService para obtener el Tipo de Cambio Banco Central Costa Rica

Hola! colegas.

Comparto un pequeño script muy sencillo sin dependencias de librerias SOAP para obtener el tipo de cambio en colones, valor de compra y venta. Emitido de la fuente del Banco Central Costa Rica

<?php
function etiqueta_final($parser, $name) {
    global $info,$datos,$contador;
    $info[$name][] = $datos;
}
function extractor_datos($parser,$data){
                global $datos;
                $datos = $data;
}
function extractor_datos_tags($parser,$data){
                global $datos;
                $datos .= $data;
}
function parser_extractor($cadena,$tags=true){
                
	// Definiendo variables 
	global $info,$datos,$contador;
	$info = array();
	$datos = "";
	$contador = 0;

	// Creando el parser
	$xml_parser = xml_parser_create();

	// Definiendo la funciones controladoras
	xml_set_character_data_handler($xml_parser,($tags?"extractor_datos":"extractor_datos_tags"));
	xml_set_element_handler($xml_parser, "", "etiqueta_final");
	
	// Procesando el archivo
	if (!xml_parse($xml_parser, $cadena)) {
					die(sprintf("XML error: %s at line %d",
																	xml_error_string(xml_get_error_code($xml_parser)),
																	xml_get_current_line_number($xml_parser)));
	}
	
	// Liberando recursos
	xml_parser_free($xml_parser); 
	return $info;
}


/*
La siguiente Funcion debe recibir por parametro la fecha en formato dd/mm/YYYY
*/
function tipo_cambio($fecha){
	// Rutas de los archivos XML con el tipo de cambio
	$file["compra"] = "http://indicadoreseconomicos.bccr.fi.cr/indicadoreseconomicos/WebServices/wsIndicadoresEconomicos.asmx/ObtenerIndicadoresEconomicosXML?tcIndicador=317&tcFechaInicio=$fecha&tcFechaFinal=$fecha&tcNombre=dmm&tnSubNiveles=N"; // Archivo XML 
	$file["venta"] = "http://indicadoreseconomicos.bccr.fi.cr/indicadoreseconomicos/WebServices/wsIndicadoresEconomicos.asmx/ObtenerIndicadoresEconomicosXML?tcIndicador=318&tcFechaInicio=$fecha&tcFechaFinal=$fecha&tcNombre=dmm&tnSubNiveles=N"; // Archivo XML 
	
	// Extrae el tipo cambio con el valor de COMPRA
	$data_file = file_get_contents($file["compra"]);
	$ainfo = parser_extractor($data_file,false);
	$fuente = parser_extractor($ainfo["STRING"][0]);
	$tipo["compra"] = $fuente["NUM_VALOR"][0];
	
	// Extrae el tipo cambio con el valor de VENTA
	$data_file = file_get_contents($file["venta"]);
	$ainfo = parser_extractor($data_file,false);
	$fuente = parser_extractor($ainfo["STRING"][0]);
	$tipo["venta"] = $fuente["NUM_VALOR"][0];
	
	// Retornando valor de compra y venta del dolar
	if ( $tipo["compra"] == "" or $tipo["venta"] == "" ){
		return false;
	}else{
		return $tipo;
	}

}

$fecha = date('d/m/Y');
$valor = tipo_cambio($fecha);

/* Imprime en Pantalla el Resultado de Valor de COMPRA Y VENTA*/
/* Pueden utilizar la variable llamada $valor( que es una estructura Arreglo ) con la posicion de compra y venta en sus aplicaciones como gusten. */
echo "<pre>";
print_r($valor);
echo "</pre>";
?>

Para probar el resultado del scrip aqui les dejo el URL: http://www.mauricioalpizar.com/ejemplos/tipo_cambio_costa_rica/tipocambio.php

Buena Suerte!.

 

Pruebas automatizadas de Software Web con IMACROS.

Hola!, comparto el siguiente aporte que estoy seguro que será de mucha utilidad para aquellos desarrolladores de software que cuando se encuentran en la etapa de “probar” o “testear” sus propias aplicaciones dicen: pufff! que cansado!, “ahora tengo que probar mi aplicación una y otra vez”, y nos encontramos en una esta etapa repititiva de hacer ciclos de ciclos para verificar si los datos son ingresados correctamente a mi motor de base de datos, o bien el software realiza el proceso correcto entre pantallas o flujo de procesos, o el peor de los casos tengo mi aplicación terminada y me piden un “pequeñito” ajuste/cambio que me afecta gran parte de mi proceso.

Pues bien!, para esto existen herramientas automatizadas ( para los que no sabían), anteriormente utilizada selenium para mis ciclos de prueba, pero me di a la tarea de investigar alguna otra herramienta o plugin para mi navegador FireFox y me encontré con iMACROS para firefox, aunque tiene varios años de haber sido liberado me di a la tarea de probarlo.

iMacros es una herramienta automatizada que le permite grabar y reproducir aquellas tareas repetitivas que usted realiza constantemente en el navegador, como por ejemplo llenar formularios, realizar procesos de login/autenticación. Además que contiene un librería de ejemplos que le pueden guiar para probar su proyecto.

En conclusión me fue de gran utilidad y les comparto el link de cómo usarlo.

Buena Suerte!

 

Ejemplo de como programar un Web service utilizando NuSOAP y PHP (Parte I)

A continuación se muestra como desarrollar un Web Service del lado del proveedor / Servidor,

1.- Incluimos la librería nusoap dentro de nuestro archivo.  lo voy a llamar “mi_ws1.php”, de manera que dentro de mi archivo mi_ws1.php voy a colocar el siguiente código:

<?php

// incluimos la libreria ó toolkit nusoap que descargamos previamente
require_once('lib/nusoap.php');

?>

2.- Creamos la instancia al servidor

<?php
// Vamos a crear la instancia del servidor.
$server = new nusoap_server();

?>

3.- Inicializamos el soporte WSDL

<?php
$server->configureWSDL('Mi Web Service #1', 'urn:mi_ws1');
?>

//urn es el “Uniform Resource Name”, es el nombre del recurso con que va a ser accesado el Web Service como lo comentamos es como el manual del WSDL

4.- Registramos la estructura de datos usado por el servicio

<?php
// Parametros de entrada
$server->wsdl->addComplexType(  'datos_persona_entrada', 
                                'complexType', 
                                'struct', 
                                'all', 
                                '',
                                array('nombre'   => array('name' => 'nombre','type' => 'xsd:string'),
                                      'email'    => array('name' => 'email','type' => 'xsd:string'),
                                      'telefono' => array('name' => 'telefono','type' => 'xsd:string'),
                                      'ano_nac'  => array('name' => 'ano_nac','type' => 'xsd:int'))
);
// Parametros de Salida
$server->wsdl->addComplexType(  'datos_persona_salidad', 
                                'complexType', 
                                'struct', 
                                'all', 
                                '',
                                array('mensaje'   => array('name' => 'mensaje','type' => 'xsd:string'))
);
?>

5.- Registramos el método/función para que el Web Service lo reconozca y se pueda utilizar:

<?php
$server->register(  'calculo_edad', // nombre del metodo o funcion
                    array('datos_persona_entrada' => 'tns:datos_persona_entrada'), // parametros de entrada
                    array('return' => 'tns:datos_persona_salidad'), // parametros de salida
                    'urn:mi_ws1', // namespace
                    'urn:hellowsdl2#calculo_edad', // soapaction debe ir asociado al nombre del metodo
                    'rpc', // style
                    'encoded', // use
                    'La siguiente funcion recibe los parametros de la persona y calcula la Edad' // documentation
);
?>

6.- Definimos el método como una función PHP

Lo que aconsejo para que tu código sea ordenado,legible es que todas tus funciones de PHP sean construidas en una unidad aparte ( miarchivo_func_soap.php) y luego realizas el include de ese archivo en tu codigo de la declaracion del servicio SOAP.

<?php
function calculo_edad($datos) {
    $edad_actual = date('Y') - $datos['ano_nac'];
    $msg = 'Hola, ' . $datos['nombre'] . '. Hemos procesado la siguiente informacion ' . $datos['email'] . ', telefono'. $datos['telefono'].' y su Edad actual es: ' . $edad_actual . '.'; 
    return array('mensaje' => $msg);
}
?>

7.- Usamos el pedido para invocar el servicio y hasta aquí llegaría el ejemplo del lado del servidor.

<?php
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
?>

Para probar el WS: http://www.validwsdl.com/
Escribes la dirección: http://www.mauricioalpizar.com/ejemplos/nusoap/mi_ws1.php?

Resultado:

 

Respuesta del consumo del Web Service deberia ser:

Outgoing SOAP Request

POST /ejemplos/nusoap/mi_ws1.php HTTP/1.0
Host: www.mauricioalpizar.com
Content-Type: text/xml
Content-Length: 1032
SOAPAction: "urn:hellowsdl2#calculo_edad"

<?xml version='1.0'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/' xmlns:SOAP-ENC='http://schemas.xmlsoap.org/soap/encoding/' xmlns:tns='urn:mi_ws1' xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>
   <SOAP-ENV:Body>
      <ns1:calculo_edad SOAP-ENV:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:ns1='urn:mi_ws1'>
         <datos_persona_entrada xsi:type='tns:datos_persona_entrada'>
            <nombre xsi:type='xsd:string'>
               Mauricio Alpizar
            </nombre>
            <email xsi:type='xsd:string'>
               ealpizar@cyberfuel.com
            </email>
            <telefono xsi:type='xsd:string'>
               8700-5455
            </telefono>
            <ano_nac xsi:type='xsd:int'>
               1980
            </ano_nac>
         </datos_persona_entrada>
      </ns1:calculo_edad>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Incoming SOAP Response

<?xml version='1.0' encoding='ISO-8859-1'?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:SOAP-ENC='http://schemas.xmlsoap.org/soap/encoding/' xmlns:tns='urn:mi_ws1'>
   <SOAP-ENV:Body>
      <ns1:calculo_edadResponse xmlns:ns1='urn:mi_ws1'>
         <return xsi:type='tns:datos_persona_salidad'>
            <mensaje xsi:type='xsd:string'>
               Hola, Mauricio Alpizar. Hemos procesado la siguiente informacion ealpizar@cyberfuel.com, telefono8700-5455 y su Edad actual es: 34.
            </mensaje>
         </return>
      </ns1:calculo_edadResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Si deseas ver el código para poder consumirlo aquí esta el ejemplo:

http://www.mauricioalpizar.com/ejemplo-de-como-consumir-un-web-service-utilizando-nusoap-y-php-parte-ii/

 Referencias bibliográficas:

  • http://searchsoa.techtarget.com/definition/URN