LinuxParty
En esta entrada vamos a ver unos cuantos puntos que nos servirán para securizar PHP en nuestro servidor web. Nos centramos en la configuración propia de PHP, hay que tener en cuenta que la securización de la capa aplicación es tanto o más importante que la de la configuración del servidor. Hay que tener siempre actualizados a la última versión estable y con los parches de seguridad correctamente aplicados cualquier cms o script de terceros tipo WordPress, Joomla, OsCommerce, etc.
Ocultar la versión de PHP
Un artículo completo sobre esto, podéis verlo aquí (ocultar la versión de PHP). Básicamente evitamos que con un simple telnet puedan averiguar la versión de PHP que hay corriendo en el servidor:
# telnet servidor 80 Connected to xxx.com (xx.xx.xx.xx). Escape character is '^]'. HEAD / HTTP/1.0 HTTP/1.1 200 OK Date: Fri, 13 Aug 2010 14:18:09 GMT Server: Apache/1.3.26 (Unix) mod_gzip/1.3.26.1a PHP/5.3.3 Last-Modified: Fri, 12 Feb 2010 12:22:56 GMT ETag: "44967c-6f-53ca4800" Accept-Ranges: bytes Content-Length: 111 Connection: close Content-Type: text/html Connection closed by foreign host.
Leer más: 10 formas de hacer PHP más seguro. 1 comentario
La mayoría de la gente sabe que las pruebas de sus sitios web es una buena idea, pero después de algún tiempo de pruebas puede llegar a ser tedioso. ¿Y si una gran cantidad de este proceso de pruebas se automatizan? Automatizado el proceso no tiene que ir a través de todas las funciones de forma manual, una y otra vez, para asegurarse de que todavía funciona después de actualizar el código? Aquí es donde las pruebas unitarias entran en acción, para automatizar el proceso de prueba.
Unit hace que sea más fácil probar, y sobre todo más seguro, de modificar su código, ya que las capturas de cualquier irregularidad en el comportamiento (es decir, bugs) pueden ser introducidos en el nuevo código. En este artículo usted aprenderá los fundamentos absolutos de las pruebas unitarias con PHPUnit y lo fácil que es empezar a usarlo, guiándole a través del proceso de escribir su primera prueba.
Por alguna razón, puede que le interese mantener una o varias versiones de PHP en un mismo servidor, bien porque tuviera alguna vieja aplicación web a la que todavía no le ha dado tiempo a actualizar, o bien porque quiera probar nuevas versiones Beta de PHP, y no quiere que interfieran en el normal funcionamiento de las aplicaciones que ya están corriendo, en este artículo vamos a explicar, como siempre de la forma más sencilla posible como hacerlo, siempre es recomendable probar primero en su localhost.
Lighttpd con soporte para PHP a través tanto de CGI como de FastCGI. Como su nombre lo indica, FastCGI es preferible.
¿Soporta cachers opcode?
como APC, TurckMM, XCache y otros
¡SÍ! Incluso si otros documentos dicen que no funcionan en CGI. Bajo lighttpd, PHP se ejecuta normalmente como FastCGI que soporta cachers como mod_php4 en Apache.
- https://pecl.php.net/apc
- https://eaccelerator.net/ (Sucesor de Turck mmCache)
- XCache, XCache FAQ
Este documento está enlazado por su referencia con este artículo:
Migrar de PHPNuke a Joomla 2.5.X, paso a paso.
<?php // /modules.php?name=News&new_topic=12 // /modules.php?name=News&file=print&sid=6590 // /modules.php?name=news&file=article&sid=1012 // /modules.php?name=Search&query=espartaco // /modules.php?name=News&file=friend&op=FriendSend&sid=6590/abrir-puertos-via-telnet:-nat-add-virtualserver $tiponame=isset($_GET["name"]) ? $_GET["name"] : null ; // $tiponame=trim(htmlspecialchars($_GET["name"]))."<br>"; $tipofile=isset($_GET["file"]) ? $_GET["file"] : null ; $tipotopic=isset($_GET["new_topic"]) ? $_GET["new_topic"] : null ; $ticodigo=isset($_GET["sid"]) ? $_GET["sid"] : null ; $tiquery =isset($_GET["query"]) ? $_GET["query"] : null ; // echo "Zona Comprobacion captura de datos"; // echo "tiponame: $tiponame <br>"; // echo "tipofile: $tipofile <br>"; // echo "tipotopic: $tipotopic <br>"; // echo "ticodigo: $ticodigo <br>"; // echo "tiquery: $tiquery <br>"; if ($tipofile == "friend") { $tipofile = "article"; }; if (($tiponame == "Search") && ($tiquery <> "")) { ?> <meta http-equiv="REFRESH" content="0;url=/<?php echo "/component/search/?searchword=$tiquery"; ?>"> <?php }; if (($tiponame == "News") && ($tipotopic <> "")) { ?> <meta http-equiv="REFRESH" content="0;url=/<?php echo "index.php?option=com_content&view=category&id=$tipotopic&Itemid=101"; ?>"> <?php }; if ($tipofile == "print") { $tipofile = "article"; }; if ($tiponame == "print") { $tiponame = "News"; }; // echo "<hr>"; // echo "Tras Zona Comprobaciones if"; // echo "tiponame: $tiponame <br>"; // echo "tipofile: $tipofile <br>"; // echo "tipotopic: $tipotopic <br>"; // echo "ticodigo: $ticodigo <br>"; // echo "tiquery: $tiquery <br>"; $tiponame=strtolower ($tiponame); if ($tiponame <> "news") { echo ' <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="https://www.w3.org/1999/xhtml" xml:lang="en-gb" lang="en-gb" dir="ltr"> <head> <title>404 - Error: 404</title> <link rel="stylesheet" href="/templates/system/css/error.css" type="text/css" /> <meta http-equiv="REFRESH" content="14;url=https://www.linuxparty.es"> </head> <body> <div class="error"> <div id="outline"> <div id="errorboxoutline"> <div id="errorboxheader">404 - Artículo no encontrado</div> <div id="errorboxbody"> <p><strong>Es posible que no pueda visitar esta página por: tiponame</strong></p> <ol> <li>un marcador/favorito <strong>fuera de fecha</strong></li> <li>un motor de búsqueda que tiene una lista <strong>fuera de fecha para este sitio</strong></li> <li>una <strong>dirección mal escrita</strong></li> <li>usted <strong>no tiene acceso</strong> a esta página</li> <li>El recurso solicitado no fue encontrado.</li> <li>Se produjo un error al procesar su solicitud.</li> </ol> <p><strong>Por favor, intente una de las páginas siguientes:</strong></p> <ul> <li><a href="/index.php" title="Ir a la página de Inicio">Página de inicio</a></li> <li><a href="/index.php?option=com_search" title="Buscador del sitio">Buscador del sitio</a></li> </ul> <p>Si las dificultades persisten, póngase en contacto con el administrador de este sitio..</p> <div id="techinfo"> <p>Artículo no encontrado</p> <p> </p> </div> </div> </div> </div> </div> </body> </html> '; } if ($tipofile <> "article") { echo ' <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="https://www.w3.org/1999/xhtml" xml:lang="en-gb" lang="en-gb" dir="ltr"> <head> <title>404 - Error: 404</title> <link rel="stylesheet" href="/templates/system/css/error.css" type="text/css" /> <meta http-equiv="REFRESH" content="15;url=https://www.linuxparty.es"> </head> <body> <div class="error"> <div id="outline"> <div id="errorboxoutline"> <div id="errorboxheader">404 - Artículo no encontrado</div> <div id="errorboxbody"> <p><strong>Es posible que no pueda visitar esta página por: tipofile </strong></p> <ol> <li>un marcador/favorito <strong>fuera de fecha</strong></li> <li>un motor de búsqueda que tiene una lista <strong>fuera de fecha para este sitio</strong></li> <li>una <strong>dirección mal escrita</strong></li> <li>usted <strong>no tiene acceso</strong> a esta página</li> <li>El recurso solicitado no fue encontrado.</li> <li>Se produjo un error al procesar su solicitud.</li> </ol> <p><strong>Por favor, intente una de las páginas siguientes:</strong></p> <ul> <li><a href="/index.php" title="Ir a la página de Inicio">Página de inicio</a></li> <li><a href="/index.php?option=com_search" title="Buscador del sitio">Buscador del sitio</a></li> </ul> <p>Si las dificultades persisten, póngase en contacto con el administrador de este sitio..</p> <div id="techinfo"> <p>Artículo no encontrado</p> <p> </p> </div> </div> </div> </div> </div> </body> </html> '; } // echo "$tiponame -> $tipofile -> $ticodigo"; if ($tiponame == "news") { if ($tipofile == "article") { $string = $ticodigo; $pattern = '/(\d+)\/(\w+)/i'; $replacement = '${1}-$2'; $ticodigo=preg_replace($pattern, $replacement, $string); $ticodigo = str_replace(":","-",$ticodigo); // echo "<hr>"; // echo "Tras Zona preformato sin replace"; // echo "string: $string <br>"; // echo "pattern: $pattern <br>"; // echo "tipotopic: $tipotopic <br>"; // echo "ticodigo: $ticodigo <br>"; // echo "replacement: $replacement <br>"; $title = strtolower ($ticodigo); $titulo = str_replace(" ","-",htmlspecialchars($title)); $titulo = str_replace("(","",$titulo); $titulo = str_replace("'","",$titulo); $titulo = str_replace('"',"",$titulo); $titulo = str_replace(".","-",$titulo); $titulo = str_replace(",","",$titulo); $titulo = str_replace("%","porciento",$titulo); $titulo = str_replace(")","",$titulo); $titulo = str_replace("?","",$titulo); $titulo = str_replace("¿","",$titulo); $titulo = str_replace("/","-",$titulo); $titulo = str_replace("¡","",$titulo); $titulo = str_replace(chr(161),"",$titulo); // caracter ¡ $titulo = str_replace(chr(171),"",$titulo); // caracter « $titulo = str_replace(chr(187),"",$titulo); // caracter » $titulo = str_replace(chr(225),"a",$titulo); // caracter á $titulo = str_replace(chr(233),"e",$titulo); // caracter é $titulo = str_replace(chr(237),"i",$titulo); // caracter í $titulo = str_replace(chr(241),"n",$titulo); // caracter ñ $titulo = str_replace(chr(243),"o",$titulo); // caracter ó $titulo = str_replace(chr(250),"u",$titulo); // caracter ú $titulo = str_replace(chr(191),"",$titulo); // caracter ¿ $titulo = str_replace(chr(193),"a",$titulo); // caracter Á $titulo = str_replace(chr(201),"e",$titulo); // caracter É $titulo = str_replace(chr(205),"i",$titulo); // caracter Í $titulo = str_replace(chr(209),"n",$titulo); // caracter Ñ $titulo = str_replace(chr(211),"o",$titulo); // caracter Ó $titulo = str_replace(chr(218),"u",$titulo); // caracter Ú $ticodico = $titulo; ?> <meta http-equiv="REFRESH" content="0;url=/<?php echo "/$ticodico"; ?>"> <?php } // endif if ($tipofile == "article") } // endif if ($tiponame == "News") ?>
Este documento está enlazado por su referencia con este artículo:
Migrar de PHPNuke a Joomla 2.5.X, paso a paso.
La tan esperada versión de PHP 5.5.0, finalmente ha sido publicada, con muchas nuevas características e integrando Zend OPcache ahora de código abierto. Con el nuevo framework Laravel PHP gana a RoRs y CodeIgnitor que se convertirán por miles, Google anunció recientemente el soporte para PHP en su App Engine y la corriente renacentista de PHP está en marcha. Esto es una gran noticia para el lenguaje de programación más popular de la web. "La lista completa de las nuevas características está disponible en el registro de cambios, y el código fuente está en la página de descarga.
Con la versión 3.1, el sistema de gestión de contenido de código abierto (CMS) Joomla introduce la posibilidad de adjuntar varias etiquetas a los contenidos en todos los componentes principales. Los desarrolladores también han incorporado el MediaWiki y los plugins de OpenStreetMap en la distribución del núcleo y ha añadido una serie de nuevas características menores. El plugin GeSHi para la sintaxis fue retirado de la instalación por omisión ya que los desarrolladores lo consideran útil para sólo un pequeño subconjunto de sus usuarios.
5 Construir PHP 5.4.12 (FastCGI)
Descargar y extraer PHP 5.4.12:
mkdir /opt/phpfcgi-5.4.12
mkdir /usr/local/src/php5-build
cd /usr/local/src/php5-build
wget https://de.php.net/get/php-5.4.12.tar.bz2/from/this/mirror -O php-5.4.12.tar.bz2
tar jxf php-5.4.12.tar.bz2
cd php-5.4.12/
Instalar los requisitos previos para la construcción de PHP5:
yum groupinstall 'Development Tools'
yum install libxml2-devel libXpm-devel gmp-devel libicu-devel t1lib-devel aspell-devel openssl-devel bzip2-devel libcurl-devel libjpeg-devel libvpx-devel libpng-devel freetype-devel readline-devel libtidy-devel libxslt-devel libmcrypt-devel pcre-devel curl-devel mysql-devel ncurses-devel gettext-devel net-snmp-devel libevent-devel libtool-ltdl-devel libc-client-devel postgresql-devel
Configurar y compilar PHP 5.4.12 como sigue: para mas ayuda mire:
./Configure --help
para ver todas las opciones disponibles. Si se utiliza un comando ./configure diferente, es posible que se necesitan bibliotecas adicionales, o el proceso de construcción se producirá un error):
./configure \
--prefix=/opt/phpfcgi-5.4.12 \
--with-pdo-pgsql \
--with-zlib-dir \
--with-freetype-dir \
--enable-mbstring \
--with-libxml-dir=/usr \
--enable-soap \
--enable-calendar \
--with-curl \
--with-mcrypt \
--with-zlib \
--with-gd \
--with-pgsql \
--disable-rpath \
--enable-inline-optimization \
--with-bz2 \
--with-zlib \
--enable-sockets \
--enable-sysvsem \
--enable-sysvshm \
--enable-pcntl \
--enable-mbregex \
--with-mhash \
--enable-zip \
--with-pcre-regex \
--with-mysql \
--with-pdo-mysql \
--with-mysqli \
--with-jpeg-dir=/usr \
--with-png-dir=/usr \
--enable-gd-native-ttf \
--with-openssl \
--with-fpm-user=apache \
--with-fpm-group=apache \
--with-libdir=lib64 \
--enable-ftp \
--with-imap \
--with-imap-ssl \
--with-kerberos \
--with-gettext \
--enable-cgi
La última opción ( --enable-cgi ) se asegura de esta versión PHP funciona con FastCGI.
make
make install
Copie php.ini a la ubicación correcta:
cp /usr/local/src/php5-build/php-5.4.12/php.ini-production /opt/phpfcgi-5.4.12/lib/php.ini
Eso es todo - si lo desea, ahora puede instalar algunos módulos adicionales como APC, memcache, memcached e ionCube.
La APC, memcache y módulos memcached se pueden instalar a través de PEAR que hay que instalar e inicializar primero:
yum install php-pear
cd /opt/phpfcgi-5.4.12/etc
pecl -C ./pear.conf update-channels
APC ahora se puede instalar de la siguiente manera:
pecl -C ./pear.conf install apc
Acepte todos los valores predeterminados. Después, abierto / opt/phpfcgi-5.4.12/lib/php.ini ...
vi /opt/phpfcgi-5.4.12/lib/php.ini
... y agregue la línea extension = apc.so al final del archivo (también se puede configurar algunas opciones adicionales APC):
[...] extension=apc.so apc.enabled=1 apc.shm_size=128M apc.ttl=0 apc.user_ttl=600 apc.gc_ttl=600 apc.enable_cli=1 apc.mmap_file_mask=/tmp/apc.XXXXXX ;apc.mmap_file_mask=/dev/zero ;apc.shm_segments = 5 |
La extensión memcache se puede instalar de la siguiente manera:
pecl -C ./pear.conf install memcache
Abrir / opt/phpfcgi-5.4.12/lib/php.ini ...
vi /opt/phpfcgi-5.4.12/lib/php.ini
... y agregue la línea extension = memcache.so al final del archivo:
[...] extension = memcache.so |
La extensión memcached se puede instalar de la siguiente manera:
yum install libmemcached-devel
pecl -C ./pear.conf install memcached
Abrir/opt/phpfcgi-5.4.12/lib/php.ini...
vi /opt/phpfcgi-5.4.12/lib/php.ini
... y agregue la línea extension = memcached.so al final del archivo:
[...] extension = memcached.so |
El cargador ionCube se puede instalar de la siguiente manera:
cd /tmp
Siguiente descarga y descomprimir el paquete de cargador ionCube correcto para su arquitectura (x86 o x86_64).
Para x86_64:
wget https://downloads2.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz
tar xfvz ioncube_loaders_lin_x86-64.tar.gz
Para x86:
wget https://downloads2.ioncube.com/loader_downloads/ioncube_loaders_lin_x86.tar.gz
tar xfvz ioncube_loaders_lin_x86.tar.gz
Proceda de la siguiente manera:
cp ioncube/ioncube_loader_lin_5.4.so /opt/phpfcgi-5.4.12/lib/php/extensions/no-debug-non-zts-20100525/ioncube.so
vi /opt/phpfcgi-5.4.12/lib/php.ini
Agregue la líneazend_extension = /opt/phpfcgi-5.4.12/lib/php/extensions/no-debug-non-zts-20100525/ioncube.sojusto al principio del archivo (antes de la línea[PHP]):
zzend_extension = /opt/phpfcgi-5.4.12/lib/php/extensions/no-debug-non-zts-20100525/ioncube.so
[PHP]
[...]
|
En ISPConfig 3.0.5, puede configurar la nueva versión PHP bajo Sistema> Otras versiones de PHP . En la ficha Nombre, por favor introduzca un nombre para la versión de PHP (por ejemplo PHP 5.4.12 ) - esta versión PHP aparecerá con este nombre en la configuración del sitio web en ISPConfig:
Ir a lapestaña configuración FastCGI (la pestaña configuración de PHP-FPM se puede dejar vacía) y rellena todos los campos de la siguiente manera:
[ < Anterior ] || [ Siguiente > ]
phpGrid ofrece grids (rejillas) con Ajax habilitado de aspecto profesional, pudiendo crear, leer, actualizar y eliminar las operaciones (CRUD) para desarrolladores Web en tan sólo dos líneas de código. Cuenta con características de edición cross-browser (a través del navegador) y online, soporte para todos los controles de formulario HTML, barra de herramientas de búsqueda integrada, un datagrid maestro, visualización de imágenes, exportación de datos a MS Excel y HTML, control de permiso, un rodillo de tema, registro incorporado para ordenar por cualquier columna, soporte para las principales bases de datos incluyendo MySQL, SQL Server y Oracle, soporte para sistemas de registro para grandes bases de datos. WYSIWYG y Ajax upload de archivos.
PHPLOT es una clase PHP para la creación de gráficos y diagramas. Funciona con PHP5 (pero versiones también soporta versiones más antiguas como PHP4). PHPlot utiliza la extensión PHP GD para producir PNG, GIF o JPEG. Las Fuentes TrueType (TTF) son opcionales, o una función de fuentes de GD se pueden utilizar. Los tipos de gráficos disponibles son: área, barras, líneas / puntos, líneas, pastel, puntos, cuadrados, barra apilados, bar y delgadas-line. Etiquetas, marcas de graduación, leyenda parcela, ejes X / Y, y todos configurables. Las imágenes pueden ser importadas como fondo, varios gráficos se pueden dibujar en una imagen, y las imágenes se pueden guardar en el disco o devueltos a un navegador.
-
PHP
- La manera elegante de Procesar archivos XML con PHP
- PHP AJAX 1.5.1, Ajax y PHP.
- RAD para PHP, P4A
- Utilizar PostgreSQL y PHP en Windows
- Crear archivos PDF, desde la Web en PHP.
- El impacto ambiental de PHP en comparación con C++ En Facebook
- ¿Qué hay nuevo en Unicode en PHP V5.3?
- 15 años de PHP
- Participa en la PHP Barcelona Conference 2010
- Publicada la versión 7 de Drupal
- Monitoreo Wordpress (Y otras aplicaciones WEB con respaldo de base de datos)
- Rejillas (Grid) en PHP con DataGrid