Categories
PHP Seguridad Sql Injection Web

Ejercicio de fin de Semana: Evitar SQL Injection con PHP

A través de tweako (visto hace algunos minutos en menéame) llegué a un artículo -en inglés- que explica como protegerse de ataques de Inyección de SQL con PHP. En el mencionado artículo, en la última parte aparecen las siguientes dos porciones de código:

php:

<?php

# Ok, so I'm going to oversecure a query to the database that selects an article
# by using the given article ID.
# Here is the code.

//Database connection is present
//Make sure that the id is actually given

if (isset($_GET['id']))
{
        $id = $_GET['id'];
}
else
{
        die('Please provide an article ID');
}
 
//Make sure that its an integer
if (is_integer($id))
{
        die('Please enter a valid article ID');
}
 
//Validate that its in between the ranges 1 and 10,000
if ($id < 1 || $id > 10000)
{
        die('Please enter a valid artile ID');
}
 
//Construct the query
$SQL = "SELECT * FROM posts WHERE postID = '".$id."'";

echo $SQL; // Línea agregada

?>

php:

<?php

# This next one will validate a username before its entered into the database.

//Database connection is present
//Make sure that the id is actually given
if (isset($_GET['username']))
{
        $username = $_GET['username'];
}
else
{
        die('Please provide a username');
}
//Get the length of the username
$length = strlen($username);
//Validate the length
if ($length < 3 || $length > 20) // parte modificada
{
        die('Please enter a username between 3 and 20 characters long');
}
//Make sure that its safe to enter the database.
$username = mysql_real_escape_string($username);
//Construct the query
$SQL = "SELECT * FROM username WHERE username = '".$username."'";
//Show the username
echo 'Username: '.stripslashes($username);
//Send the query and close the connection to the database

?>

Los códigos mostrados ¿son correctos? si no es así, ¿qué errores tiene?.

Categories
Diseño Perú Varios Web

Diario El Comercio estrena “nueva” Web

El Comercio, es uno de los diarios más leídos de Perú y al parecer acaba de estrenar una "nueva" versión de su sitio Web. Giovanni Lamarca hace el siguiente resumen de las novedades:

1. Tiene radio! Por fin un medio multimedia. Ya Terra había incluido la señal de Canal N (y RPP texto), pero esto es distinto. Esto es un periódico que suena e incluye video. Dejo el tema del YouTube para otro post. 🙂

2. Lo más importante arriba y claro Y lo más importante es que yo escoja qué quiero leer. Si la web, si la edición impresa, si los clasificados. 🙂

3 Publicidad entrometida (literalmente) No son los odiosos pop ups que se abren sin que uno les pregunte y aunque se estila usarla como divisor (separa la cabecera de las notas horarias), me resulta un poco grande. Depende del tenor del aviso para tener un elemento que alegre o, en todo caso, desentone. Sobre gustos y colores… 🙁

4 Tags! Por fin sabremos qué palabras o temas son los que más se leen en el diario. La nubecita de palabras (algunas más grandes que otras) indican, por su tamaño, los items o criterios de busqueda o cantidad de apariciones de determinado tema en la edición web. 😉

5 Blogs! Válgame Dios! Y con posibilidad para comentarios! Merece tomarse una res en el Queirolo!

6 Incertidumbre Finalmente, un espacio para ser llenado con interactivos que, desde mi punto de vista, costará encontrarles un común denominador. Foros, mail de contactos, juegos, información de mercado, guías, ediciones anteriores, RSS… mmm Lo bueno es que queda pampa. Harta pampa

Saldo positivo y muchas felicitaciones!!!

Sinceramente no comparto el fanatismo de Giovanni por un trabajo que, en mi opinión, deja mucho que desear; estos son sólo algunos de los puntos en contra que veo:

  • Varias secciones son prácticamente inutilizables si no se tiene javascript habilitado.
  • Demasiado contraste en los colores -- al momento de escribir estas líneas todavía estoy un poco cegado por el amarillo intenso que usaron 😛
  • Hay demasiado desorden, no pude encontrar varias de las cosas que menciona Giovanni 😀

La versión anterior me parece que al menos era un poco más sobria y más usable que esta nueva versión (imagen capturada con Firefox)

Categories
CSRF Seguridad Web WordPress XSS

Actualización de seguridad: WP-Cache 2.1.1

Este último fin de semana, Ricardo Galli liberó una nueva versión que corrige unos problemas de seguridad presente en su popular plugin WP-Cache.

Estos problemas se presentaban porque en versiones anteriores no se implementaron ningún tipo de control para evitar ataques del tipo CSRF al momento de guardar las opciones de este plugin, por lo cual alguien podía usar un exploit parecido al de unos días atrás para persistir HTML peligroso en el archivo de configuración.

Si la siguiente prueba de concepto funciona en tu blog, entonces es recomendable actualizar de versión (sólo se hicieron cambios en la página que guarda las preferencias, así que no debería haber problemas):

code:

http://wp/wp-admin/options-general.php?page=wp-cache/wp-cache.php&wp_rejected_user_agent=</textarea><script>alert(/XSS/)</script>

Por otro lado, si tienen algo de experiencia en PHP, les sugiero que revisen los plugins que actualmente usan y guardan sus preferencias en base de datos (presencia de la función update_option); si no encuentran ninguna llamada a las funciones wp_nonce_field, wp_nonce_url, wp_verify_nonce o check_admin_referer, entonces probablemente sus instalaciones de WordPress son vulnerables a este tipo de ataques.

Categories
Seguridad Sql Injection Web WordPress XSS

Más vulnerabilidades: XSS e ¿Inyección de SQL? en WordPress

Esto es de nunca acabar, se siguen reportando más vulnerabilidades XSS en WordPress, el siguiente ejemplo funciona en todas las versiones 2.x de WordPress (incluyendo la versión en desarrollo).

code:

http://wordpress/wp-admin/page-new.php?saved="><script>alert(123)</script>

Para solucionar este problema, apliquen la función attribute_escape a la dirección URL que retorna de get_page_link (línea 13 de wp-admin/page-new.php en 2.1.2).

php:

<?php echo attribute_escape(get_page_link( isset($_GET['posted']) ? $_GET['posted'] : $_GET['saved'] )); ?>

Por otro lado, la persona que reportó esa vulnerabilidad, también me comentó que existe una vulnerabilidad de Inyección de SQL que afecta a todas las versiones de este popular y últimamente bastante inseguro CMS.

La siguiente cita es parte del mail que recibí hoy en la mañana:

But there is another XSS:
wp-admin/page-new.php?saved="><script>alert(123)</script>

There is also an SQL Injection Vulnerability in combination with PHP 4.3.9
It is Possible to spy out any data. The vulnerability exists in all versions, incl. svn trunk

Categories
.NET AJAX ASP.NET Recursos Web

Ebook: Introducing Microsoft code name “Atlas” for ajax development

Para los interesados, el título hace referencia a un libro gratuito de unas 147 páginas, en el que se habla de Microsoft Atlas (antiguo nombre para el ahora denominado Microsoft Ajax) para el desarrollo de aplicaciones Web.

El libro está basado en el CTP de Julio de 2006, dividido en 4 capítulos:

  • Building Blocks of AJAX-Style Web Applications
    • The Paradigm Shift
    • The XmlHttpRequest Object
    • Existing AJAX Frameworks in .NET
    • Conclusion
  • Building Blocks of the Atlas Application Framework
    • The Atlas Architecture
    • The Programming Model of Atlas
    • A Sample Atlas Page
    • Conclusion
  • Updatable Page Fragments
    • Atlas Server Controls
    • Enabling Page Partial Rendering
    • Taking Control of Page Updates
    • Providing User Feedback During Updates
    • Conclusion
  • Atlas Controls and Extenders
    • The Atlas Control Toolkit
    • The Accordion Control
    • The Rating Control
    • The ReorderList Control
    • Atlas Server Extenders
    • Conclusion

Pueden descargarlo desde la siguiente dirección.