Códigos de programación, principalmente en javaScript, también PHP, python y otros... scripts etc. Estilos CSS, algo de flash un poco de GIMP, pasando por el Inkscape...etc, HTML 1,2,3,4,5,,,,bamboó.
lunes, 18 de julio de 2016
Un java con leche y sacarina!!
Cousas da vida!! como dicen los gallegos, a este punto hemos llegado, nunca me había asomado al Java, y ha tenido que ser ahora... programación a objetos, de eso ya lo conocía pero he de reconocer que nunca me había llamado mucho la atención, hace unas décadas trasteé el visual basic en sus comienzos, asi como el usar el producto de microsoft office, en concreto el access que por aquellas era el 97, la verdad que me gustaba pero siempre me sentía limitado, encasillado... encapsulado, era evidente POO, java apenas había despertado.
Poco a poco me fuí liberando y el nacimiento de pseudo-códigos llamó mi atención por aquellas el HTML comenzaba como .htm y apenas era una mera valla publicitaria con enlaces... como si de la primavera se tratara comenzarón a fraguarse el javascript, y el flash para gráficos incorporando posteriormente (emulando al html) el actionscript, era como coches que les ponían motores... Ese tipo de programación mucho más simplista y menos estructurada daba más alas a la imaginación.
Después y como liberarse de la larga sombra de Bill Gates, comenzaron a surgir competidores de una manera más liberal nuevos navegadores, y el salto de las base de datos, digamos más flexibles MySql, y ganando terreno PHP como lenguaje... siguieron, Python, etc... y todos estos lenguajes y pseudolenguajes sin pensarlo regresaron un poco a la encapsulación... creándose librerías como JQuery, etc.. sin llegar a ser programación orientadas a objetos usaban en parte una semejanza..
Dejando de rollos, regresando a java la verdad que apesar de los multiples defectos, casi se puede decir que me está acabando de conquistar, y a ser sincero, para una programación profesional lo veo muy útil, no digo en la calidad del trabajo sino en la facilidad de programar en equipo.
Lo dicho de momento lo tomaré con sacarina y más adelante quien sabe si me atreveré con un cappucino.
miércoles, 12 de marzo de 2014
Cómo incrementar la seguridad de una web creada con WordPress
Cómo incrementar la seguridad de una web creada con WordPress
Antes de la instalación
a) Muchas empresas de alojamiento ofrecen la posibilidad de instalar WordPress de manera automática mediante Fantástico. Aunque es una opción realmente cómoda, tiene un inconveniente: No nos permite configurar a nuestro gusto la instalación de WordPress, especialmente en cuanto al prefijo de las tablas en la base de datos, ya que se utilizará wp_, que es el que utiliza el programa de instalación por defecto. Si podéis, haced una instalación manual. Si preferís usar Fantástico recordad cambiar más adelante el prefijo de las tablas de la base de datos (veréis más adelante cómo hacerlo) b) Antes de instalar WordPress hemos de decidir dónde instalarlo. Lo podemos instalar en el directorio raíz de tu web, que sería lo normal. Pero también podemos instalarlo en una carpeta a la que le podemos dar un nombre cualquiera, por ejemplo “comentarios” u otro que se nos ocurra (algunos autores recomiendan utilizar nombres absurdos y difíciles de imaginar). Si hemos elegido “comentarios”, y para que nuestra web no aparezca como en http://www.miweb.es/comentarios/, necesitaremos mover los archivos index.php y .htaccess desde dentro de la carpeta “comentarios” al directorio raíz. Después habría que cambiar dentro de index.php estas líneas:
1
|
require('./wp-blog-header.php');
|
1
|
require('./comentarios/wp-blog-header.php');
|
Durante la instalación
Durante la instalación hay varios procedimientos que fortalecerán tu instalación de WordPress: a) En primer lugar es recomendable cambiar el prefijo de de las tablas de la base de datos antes de que esta se genere. Este prefijo se cambia en el archivo wp-config.php. Por defecto aparece “wp_”. Cámbialo por cualquier otro prefijo. Por ejemplo:
1
|
$table_prefix = 'wp57B458F_';
|
1
2
3
4
|
define('AUTH_KEY', '+tmh1=-+IPI[w{e_a-}_iK{@f#=?O0x0r|kMQ@{2@p%RTy9c&GyCd)KavDk} H;F');
define('SECURE_AUTH_KEY', 'd,QY(bCxGwtdn>QR=Gyi]3cS0}$DEz-+`,+%j!R[F@wGci;9g$`9sx#dlyE>H6W|');
define('LOGGED_IN_KEY', '2!N--t@ML1]Xb|x0~Y C%J 4Q]-+~yBl$,k9ZX<<RxoG*B$1_r(_RPPi0HiRdIyA');
define('NONCE_KEY', '_w~2=`[pZpyZFf:]W.A{=)yuafy}QkZ@+X$@>DgQUD8}QRXg^z5*j!Z(x6|lr|KB');
|
Una vez instalado WordPress
a) Crear un archivo vacío index.html en aquellos directorios que no lo tengan, lo que permite que no se pueda listar el contenido del directorio. Como alternativa más sencilla podemos añadir esta línea en nuestro archivo .htaccess: Options -Indexes b) Utilizar acceso seguro. Si en tu solución de hosting tienes posibilidad de utilizar acceso vía SSL (Secure Socket Layer), aunque sea compartido, utilízalo. Para ello tendrás que activarlo en el archivo wp-config.php:
1
|
define ('FORCE_SSL_LOGIN', true);
|
e) Suprimir el mensaje de error en la entrada al administrador: Cuando vamos a acceder al administrador de WordPress y nos equivocamos por ejemplo en la contraseña saldrá un mensaje que nos dirá que lo que está mal es la contraseña. Si no queremos dejar pistas podemos incluir esta línea en el archivo functions.php de nuestro tema:
1
|
add_filter('login_errors',create_function('$a', "return null;"));
|
1
2
3
4
5
|
# proteger wp-config.php
<files wp-config.php>
Order deny,allow
deny from all
</files>
|
1
2
3
4
5
6
|
# proteger wp-config.php
<Files wp\-config\.php>
Order Deny,Allow
Deny from all
Allow from 123.123.123
</Files>
|
1
2
3
4
5
6
|
# proteger wp-config.php
<Files wp\-config\.php>
Order Deny,Allow
Deny from all
Allow from 123.456.789
</Files>
|
1
2
3
4
5
6
|
# Proteger archivos de wp-admin
<FilesMatch "*.*">
Order Deny,Allow
Deny from all
Allow from 123.456.789
</FilesMatch>
|
1
2
3
4
5
6
|
# Proteger archivos sensibles por tipo de fichero
<FilesMatch "\.(htaccess|htpasswd|ini|phps|fla|psd|log)$">
Order Deny,Allow
Deny from all
Allow from 123.456.789.0
</FilesMatch>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<?php // install.php replacement page: http://perishablepress.com/press/2009/05/05/important-security-fix-for-wordpress/ ?>
<?php header("HTTP/1.1 503 Service Temporarily Unavailable"); ?>
<?php header("Status 503 Service Temporarily Unavailable"); ?>
<?php header("Retry-After 3600"); // 60 minutes ?>
<?php mail("your@email.com", "Database Error", "There is a problem with teh database!"); ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Error Establishing Database Connection</title>
</head>
<body>
<img src="images/wordpress-logo.png" />
<h1>Error Establishing Database Connection</h1>
<p>We are currently experiencing database issues. Please check back shortly. Thank you.</p>
</body>
</html>
|
1
|
<?php remove_action('wp_head', 'wp_generator'); ?>
|
1
2
3
4
5
6
7
8
9
|
# Protección frente a hotlinks de archivos .jpg, .jpeg, .jpe, .gif, .png
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} \.(gif|jpe?g?|png)$ [NC]
RewriteCond %{HTTP_REFERER} !^https?://([^.]+\.)?domain\. [NC]
RewriteRule \.(gif|jpe?g?|png)$ - [F,NC,L]
</ifModule>
|
1
2
3
4
5
6
7
8
9
10
|
<?php /* Plugin Name: Block Bad Queries */
if (strlen($_SERVER['REQUEST_URI']) > 255 ||
strpos($_SERVER['REQUEST_URI'], "eval(") ||
strpos($_SERVER['REQUEST_URI'], "base64")) {
@header("HTTP/1.1 414 Request-URI Too Long");
@header("Status: 414 Request-URI Too Long");
@header("Connection: Close");
@exit;
} ?>
|
martes, 13 de noviembre de 2012
Incluir páginas y subpáginas en WordPress por Nekko
por Nekko. Emprendedora incansable, fundadora de SummArg y de SiteFun.
Incluir páginas y subpáginas en WordPress
Estaba trabajando en un projecto en el que tenía que ingeniarmelas para colocar en el menú de cabecera las páginas hijas y las páginas padre, con sus respectivos condicionales para el caso de que no existieran subpáginas de un item. Afortunadamente me encontré con el blog de Gabriel Svennerberg en donde llegó a elaborar un código muy prolijo que pude utilizar para mi proyecto.Este contenido está extraido del mencionado blog.
Chequear si la página tiene subpáginas
En primer lugar busqué un método en el codex de WordPress que ayude a determinar si la página actual tiene o no subpáginas, al no encontrarlo elaboré un modo de hacerlo. Básicamente se trata de llamar a las páginas hijas utilizando wp_list_pages() y ver si devuelve algo. No es lindo pero funciona.$children = wp_list_pages('&child_of='.$post->ID.'&echo=0');
if($children) {
// Si esta página contiene subpáginas...
}
Chequear si es una página padre o una subpágina
Lo siguiente que tuve que resolver fue el chequeo para conocer si la página actual es una página padre o es una subpágina. Esto se puede realizar con el siguiente código:if(is_page() && $post->post_parent) {
// Si es una subpágina
} else {
// Es página padre
}
Cargando el submenu
Ahora necesitaba una forma de cargar las subpáginas. Esto se puede hacer utilizando la función wp_list_pages(). La parte complicada de esto es que no existe un modo para obtener la página padre y las subpáginas en una misma llamada, así que hay que llamar a la función dos veces y con ligeros cambios cada vez.if(is_page() && $post->post_parent) {
// Si es una subpágina
$children = wp_list_pages("title_li=&include=".$post->post_parent ."&echo=0");
$children .= wp_list_pages("title_li=&child_of=".$post->post_parent ."&echo=0");
} else if($has_subpages) {
// Es una página contiene subpáginas
$children = wp_list_pages("title_li=&include=".$post->ID ."&echo=0");
$children .= wp_list_pages("title_li=&child_of=".$post->ID ."&echo=0");
}
Hay otros modos de hacer esto, pero el beneficio de este método
es que automáticamente obtenemos class=”current_page_item” en el item
que representa la página en la que actualmente estamos, lo cual es útil
si queremos darle un estilo en particular.Salida a HTML
El último paso consiste en imprimir el HTML, para lo que elegí una lista desordenada.<?php // Chequear que haya algo para mostrar ?>
<?php if ($children) { ?>
<ul>
<?php echo $children; ?>
</ul>
<?php } ?>
Colocando todo junto
Ahora es tiempo de colocar todas las piezas juntas. Este código puede colocarse en cualquiera de las secciones de tu theme.<?php
$has_subpages = false;
// Chequea para ver si la página actual tiene subpáginas
$children = wp_list_pages('&child_of='.$post->ID.'&echo=0');
if($children) {
$has_subpages = true;
}
// Reseting $children
$children = "";
// Llama a los items dependiendo si es una subpágina o página padre
if(is_page() && $post->post_parent) {
// Si es una subpagina
$children = wp_list_pages("title_li=&include=".$post->post_parent ."&echo=0");
$children .= wp_list_pages("title_li=&child_of=".$post->post_parent ."&echo=0");
} else if($has_subpages) {
// Si es una página padre que tiene subpáginas
$children = wp_list_pages("title_li=&include=".$post->ID ."&echo=0");
$children .= wp_list_pages("title_li=&child_of=".$post->ID ."&echo=0");
}
?>
<?php // Chequea que exista algo que mostrar ?>
<?php if ($children) { ?>
<ul>
<?php echo $children; ?>
</ul>
<?php } ?>
martes, 31 de enero de 2012
Como extraer los archivos de una carpeta (PHP/XML)
Leer los archivos de un directorio del servidor con PHP. (Salida XML).
6 Octubre, 2008 by flash-food.comCon este código generamos un documento XML con el listado de archivos de determinado directorio del servidor web. Lo único que hay que personalizar es la línea $dir=”ruta/de/la/carpeta/a/explorar”; con la ruta de la carpeta elegida en vuestra máquina.
<?php
header("Content-type: text/xml");
$dir="ruta/de/la/carpeta/a/explorar";
$dr=@opendir($dir);
if(!$dr){
echo "<error/>";
exit;
} else {
echo "<exploracion>";
// recorremos todos los elementos de la carpeta
while (($archivo = readdir($dr)) !== false) {
// comprobamos que sean archivos y no otras carpetas
if(filetype($dir . $archivo)!="dir"){
$tam=round(filesize($dir . $archivo)/1024,0);
echo "<archivo nombre='$archivo' tam='$tam'/>";
}
}http://www.blogger.com/img/blank.gif
echo "</exploracion>";
closedir($dr);
}
?>
notas:
1._ " header("Content-type: text/xml");" debe ir en la primera linea, sino podría dar error.
texto de: http://www.flash-food.com
