LinuxParty
Debe de tener en cuenta, de que no hay completas garantías de que esto le funcione.
Para entender correctamente el artículo, suponemos que usted debe estar familiarizado con algunos conocimientos web, como por ejemplo el significado del directorio raíz donde se hospedan las páginas web (documentos)
Nota preliminar
He probado esto en un sistema Debian Etch con Apache2 y PHP5 y la dirección IP es: 192.168.0.100. El usuario y el grupo "Apache" en Debian Etch es "www-data", si utiliza una distribución diferente, el usuario y el grupo puede cambiar La ubicación del fichero php.ini ( /etc/php5/apache2/php.ini en Debian Etch) podría también variar.
Estoy utilizando un virtual host /var/www/web1/web en este ejemplo.
En Fedora, CentOS, RedHat, etc... el directorio raíz es: /var/www/html,
En Ubuntu, Debian, Slackware, etc... el directorio raíz es: /var/www.
Instalación de PHPIDS
Por razones de seguridad, quiero instalar PHPIDS fuera de la raíz del documento, por lo que he creado el directorio /var/www/web1/phpids:
mkdir /var/www/web1/phpids
Entonces he instalado PHPIDS de la siguiente manera (en el momento de escribir el artículo la última versión era 0.4.7, pero esto puede haber cambiado, por eso utilizaremos el nombre del fichero phpids-0.4.7.tar.gz que es un tarball, nosotros tras su descompresión sólo necesitamos el directorio lib/
Ya no está disponible el sitio web php-ids, con lo que tendrás que utilizar el único sitio que hemos visto para ello:
http://drupal.org/project/phpids
tar xvfz phpids-0.4.7.tar.gz
cd phpids-0.4.7
mv lib/ /var/www/web1/phpids/
Y se moverá la carpeta lib/ al directorio de nuestra aplicación /var/www/web1/phpids/
Accedo al directorio /var/www/web1/phpids/lib/IDS
cd /var/www/web1/phpids/lib/IDSY creo el directorio tmp/ (el cual contendrá el fichero de log de PHPIDS) escribible por el usuario y grupo de Apache.
chown -R www-data:www-data tmp/
Next we configure the PHPIDS configuration file (Config.ini):
Lo siguiente, configuraré el fichero de configuración PHPIDS (config.ini)
cd config/ vim config.ini
Utilizaré la configuración por defecto, todo lo que tendría que hacer es ajustar las rutas (paths)
; PHPIDS Config.ini ; General configuration settings ; !!!DO NOT PLACE THIS FILE INSIDE THE WEB-ROOT IF DATABASE ; CONNECTION DATA WAS ADDED!!! [General] filter_type = xml filter_path = /var/www/web1/phpids/lib/IDS/default_filter.xml tmp_path = /var/www/web1/phpids/lib/IDS/tmp scan_keys = false exceptions[] = __utmz exceptions[] = __utmc ; If you use the PHPIDS logger you can define specific configuration here [Logging]
3 Uso de PHPIDS
Ahora vamos a crear el archivo / var/www/web1/web/phpids.php que llame a PHPIDS para nosotros (que más adelante se anteponga ese archivo a todos nuestros archivos PHP para que nuestros archivos PHP puedan hacer uso de PHPIDS automáticamente):
vi / var/www/web1/web/phpids.php
inicio php
set_include_path( get_include_path() . PATH_SEPARATOR . '/var/www/web1/phpids/lib' ); require_once 'IDS/Init.php';
$request = array 'REQUEST' => $_REQUEST, 'GET' => $_GET, 'POST' => $_POST, 'COOKIE' => $_COOKIE ); $init = IDS_Init::init('/var/www/web1/phpids/lib/IDS/Config/Config.ini'); $ids = new IDS_Monitor($request, $init); $result = $ids->run(); if (!$result->isEmpty()) { // Take a look at the result object echo $result; require_once 'IDS/Log/File.php'; require_once 'IDS/Log/Composite.php'; $compositeLog = new IDS_Log_Composite(); $compositeLog->addLogger(IDS_Log_File::getInstance($init)); $compositeLog->execute($result); }
finphp
Ahora cuando se llama a ese archivo en un navegador, (http://192.168.0.100/phpids.php por ejemplo), podrás ver una página en blanco. Pero si se intenta añadir algunos parámetros a la URL maliciosas (por ejemplo, http://192.168.0.100/phpids.php?test=%22%3EXXX%3Cscript%3Ealert(1)%3C/script%3E) PHPIDS detectará e imprimirá sus resultados en el navegador.
Ahora tenemos que encontrar una manera de hacer que nuestros scripts PHP utilicen PHPIDS. Por supuesto, usted no desea modificar todos los scripts PHP (que podría haber cientos de ellos ...). Afortunadamente, hay una forma de hacerlo: podemos decir que un script PHP (en este caso será phpids) se anteponga a la ejecución cada vez que se llama otro script PHP. Por ejemplo, si llamamos a la info.php en el navegador, PHP primero ejecutará phpids.php y, a continuación info.php sin tener que modificar ningún fichero
Podemos hacer esto mediante el parámetro auto_prepend_file de PHP. Podemos definir esta variable en nuestro php.ini (esta es una configuración global que es válido para todos los sitios web de PHP en el servidor), o en un archivo htaccess (válido sólo para el sitio web en cuestión).:
[...] auto_prepend_file = /var/www/web1/web/phpids.php [...]Reiniciar apache...
Si utiliza un fichero .htaccess
vi /var/www/web1/web/.htaccess
Y el contenido sería:
php_value auto_prepend_file /var/www/web1/web/phpids.php
Por favor, asegúrese de que el host virtual para el sitio web /var/www/web1/web contiene algo como esto (de lo contrario la línea php_value en el htaccess. será ignorado) (si tiene que modificar el host virtual, por favor, no se olvide de reiniciar Apache):
< Directory /var/www/web1/web/ >
AllowOverride All
< /Directory >
Creamos un fichero phpinfo.php SÓLO con la funcion phpinfo(); y comprobamos si fucniona...
Escribe en el navegador (http://192.168.0.100/info.php),y verás una salida normal de phpinfo()
Ahora añade algunos parámetros maliciosos a la URL (e.g. http://192.168.0.100/info.php?test=%22%3EXXX%3Cscript%3Ealert(1)%3C/script%3E), y se mostrará un mensaje en la salida (porque /var/www/web1/web/phpids.php se ejecutó antes que /var/www/web1/web/info.php):Puedes ver el log escribiendo:
cat /var/www/web1/phpids/lib/IDS/tmp/phpids_log.txt
Ahora, mediante la observación de ese registro aprenderá lo que los hackers están tratando de hacer sobre sus aplicaciones PHP, y usted puede tratar de endurecer sus aplicaciones.
Para añadir otro nivel de seguridad adicional, podemos impedir que nuestros scripts PHP se ejecuten si PHPIDS descubre que están bajo ataque: nosotros simplemente añadiremos algo como: die('<h1>Go away!</h1>') a la sección (!$result->isEmpty()) {} de la secuencia de comandos var/www/web1/web/phpids.php
inicio php
set_include_path(
get_include_path()
. PATH_SEPARATOR
. '/var/www/web1/phpids/lib'
);
require_once 'IDS/Init.php';
$request = array(
'REQUEST' => $_REQUEST,
'GET' => $_GET,
'POST' => $_POST,
'COOKIE' => $_COOKIE
);
$init = IDS_Init::init('/var/www/web1/phpids/lib/IDS/Config/Config.ini');
$ids = new IDS_Monitor($request, $init);
$result = $ids->run();
if (!$result->isEmpty()) {
// Take a look at the result object
echo $result;
require_once 'IDS/Log/File.php';
require_once 'IDS/Log/Composite.php';
$compositeLog = new IDS_Log_Composite();
$compositeLog->addLogger(IDS_Log_File::getInstance($init));
$compositeLog->execute($result);
die('Go away!');
}
fin php
4 Links
- PHPIDS: http://php-ids.org
- PHP: http://www.php.net
- Apache: http://httpd.apache.org
-
Programación
- Gracias a la IA, el nuevo lenguaje de programación más popular es...
- Cómo instalar y utilizar Scikit-Learn en Linux
- Thomas E. Kurtz, coinventor de BASIC, muere a los 96 años
- Profesor de informática del MIT prueba el impacto de la IA en la formación de programadores
- Lanzamiento del IDE de código abierto Qt Creator 14 con soporte para complementos basados en Lua
- Plantillas para Joomla - Episodio 1: Plantillas, marcos y clubes o no...
- Este es el mejor libro que he visto para aprender a programar en Python en castellano desde cero, gratis y online
- ¿Deberían los niños seguir aprendiendo a programar en la era de la IA?
- La 'obsolescencia' de VBScript confirmada por Microsoft y su eventual eliminación de Windows
- El Gran Debate: ¿Deberían los Modelos de Inteligencia Artificial Ser de Código Abierto?
- El lenguaje de programación BASIC cumple 60 años
- El CEO de Nvidia dice que los niños no deberían aprender a programar
- 40 años de Turbo Pascal: recuerdos del dinosaurio codificador que revolucionó los IDE
- Los lenguajes de programación más populares y dónde aprenderlos.
- Top 5 de los principales lenguajes de programación para desarrollar aplicaciones de escritorio Linux