Categories
Firefox

Nuevas características de seguridad en Firefox 3

#1 Mayor claridad en el seguimiento de URL`s

Barra_firefox_3

Esto ayudara a identificar mejor las direcciones donde nos encontramos (por así decirlo mejora contra ataques de phishing).

#2 Técnicas de detección de malware & páginas potencialmente peligrosas

firefox

En este aspecto Firefox no innova demasiado y ejecutas acciones predeterminadas para ejecutable (para usuarios despistados) y tratamiento sobre controles activeX. Para detección de páginas potencialmente peligrosas Firefox seguirá como desde la versión 1.5. Listara la página que visitemos, la comparara con una lista negra (elaborada en colaboración con google) y si la página esta listada como "negra" automáticamente generara un aviso en forma de ventana emergente como se puede apreciar en la imagen.

#3 Más claridad con los certificados de seguridad (SSL)

larry-041.png

Parece ser que este sera el aspecto de la interfaz de FF3 cuando nos encontremos ante una página con certificados de seguridad, mayor transparencia que nos permitirá ver con toda la información que acredita al cifrado (si ya se que ahora también se puede pero así queda mucho más claro).

Además de cientos de novedades... mejora la gestión de memoria (lo he podido comprobar con las últimas versiones alpha´s) interfaz gráfica mucho más atractiva, el lanzamiento esta planeado para septiembre de este año según leí.

Categories
Blind SQL INJECTION

Técnicas de BLIND SQL INJECTION (I de III)

¿Quién hoy en día no conoce el archi-famoso ataque de SQL INJECTION?
Una variante que me fascina bastante de este tipo de ataque es el BLIND SQL INJECTION ó inyección de código a ciegas. Presentada hace solo un par de años en el Black Hat ha sido y es un dolor de cabeza más para los desarrolladores de aplicaciones web.

En esta primera entrada vamos a ver un poco que es esto del ataque a ciegas con un par de demos y en artículos próximos veremos como funciona realmente este tipo de ataque. Este ataque podría clasificarse bajo los ataques en base a error. El concepto del ataque es muy simple básicamente podemos saber cuando algo es cierto o no en base a roles de preguntas -me explico un poco más-.

Tenemos la siguiente URL:

asp:

http://vulnerable.com/vulnerable_parametro.asp?id_programa=166

E inyectamos código:

asp:

http://vulnerable.com/vulnerable_parametro.asp?id_programa=166 and 1=1

Como la condición 1=1 se cumple la aplicación no nos devolverá ningún error pero ¿ y si inyectamos 1=2 ?. Obviamente la condición 1=2 no se cumple, la aplicación generara una pantalla de error. Hasta aquí todo bien ¿y esto que riesgo puede tener, algún tonto que no sabe que 1=1?.

Tenemos infinidad de formas de explotar esto tipo de fallo ¿y si nos ponemos a enviarles peticiones con letras para adivinar en pocos minutos el nombre de la tabla de la base de datos ? o mejor aun la contraseña de administrador.

Hasta la próxima entrega 🙂

Categories
Firefox Seguridad Web XSS

Firefox 2.0.0.5 finalmente implementa las cookies HttpOnly

Un poco antes de lo esperado, esta última actualización de Firefox (2.0.0.5), finalmente incluye el soporte para cookies HttpOnly.

Ejemplos de uso en ASP.NET y PHP:

asp:

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Cookies["Demo"].Value = "Prueba";
        Response.Cookies["Demo"].Secure = true;
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>HttpOnly Firefox 2.0.0.5</title>
    <script type="text/javascript">
    alert(document.cookie);
    </script>
</head>
<body>

</body>
</html>

php:

<?php

// PHP 4
setcookie('foo', 'test', null, '/;HttpOnly');
/*
PHP 5

setcookie('foo', 'test', null, null, null, true);
// o
ini_set("session.cookie_httponly", 1);
// o
session_set_cookie_params(0, NULL, NULL, NULL, TRUE);
*/

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
    <title>HttpOnly Firefox 2.0.0.5</title>
        <script type="text/javascript">
            //<![CDATA[
            alert(document.cookie)
            //]]>
        </script>
</head>
</html>

Como mencioné anteriormente, esta característica no es la panacea para evitar el robo de cookies a través de XSS, pero por lo menos reducirá un poco los vectores de ataque.

Categories
.NET ASP.NET Software Libre Windows Forms

Unir documentos PDF con .NET

Actualización (19/07/2007): Luis Ruiz Pavón comenta una forma más sencilla de unir documentos usando iTextDotNet.

Una pequeña clase que hace uso de iText# (Software Libre) para unir dos o más documentos PDF en uno solo.

csharp:

using System;
using System.Collections.Generic;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;

public class PdfMerge
{
    private BaseFont baseFont;
    private bool enablePagination = false;
    private readonly List<PdfReader> documents;
    private int totalPages;

    public BaseFont BaseFont
    {
        get { return baseFont; }
        set { baseFont = value; }
    }

    public bool EnablePagination
    {
        get { return enablePagination; }
        set
        {
            enablePagination = value;
            if (value && baseFont == null)
                baseFont = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
        }
    }

    public List<PdfReader> Documents
    {
        get { return documents; }
    }

    public void AddDocument(string filename)
    {
        documents.Add(new PdfReader(filename));
    }
    public void AddDocument(Stream pdfStream)
    {
        documents.Add(new PdfReader(pdfStream));
    }
    public void AddDocument(byte[] pdfContents)
    {
        documents.Add(new PdfReader(pdfContents));
    }
    public void AddDocument(PdfReader pdfDocument)
    {
        documents.Add(pdfDocument);
    }

    public void Merge(string outputFilename)
    {
        Merge(new FileStream(outputFilename, FileMode.Create));
    }
    public void Merge(Stream outputStream)
    {
        if (outputStream == null || !outputStream.CanWrite)
            throw new Exception("OutputStream es nulo o no se puede escribir en éste.");

        Document newDocument = null;
        try
        {
            newDocument = new Document();
            PdfWriter pdfWriter = PdfWriter.GetInstance(newDocument, outputStream);

            newDocument.Open();
            PdfContentByte pdfContentByte = pdfWriter.DirectContent;

            if (EnablePagination)
                documents.ForEach(delegate(PdfReader doc)
                                  {
                                      totalPages += doc.NumberOfPages;
                                  });

            int currentPage = 1;
            foreach (PdfReader pdfReader in documents)
            {
                for (int page = 1; page <= pdfReader.NumberOfPages; page++)
                {
                    newDocument.NewPage();
                    PdfImportedPage importedPage = pdfWriter.GetImportedPage(pdfReader, page);
                    pdfContentByte.AddTemplate(importedPage, 0, 0);

                    if (EnablePagination)
                    {
                        pdfContentByte.BeginText();
                        pdfContentByte.SetFontAndSize(baseFont, 9);
                        pdfContentByte.ShowTextAligned(PdfContentByte.ALIGN_CENTER,
                            string.Format("{0} de {1}", currentPage++, totalPages), 520, 5, 0);
                        pdfContentByte.EndText();
                    }
                }
            }
        }
        finally
        {
            outputStream.Flush();
            if (newDocument != null)
                newDocument.Close();
            outputStream.Close();
        }
    }

    public PdfMerge()
    {
        documents = new List<PdfReader>();
    }
}

Si bien es cierto que hay muchas cosas por mejorar, creo que para escenarios no muy complejos basta y sobra.

Pueden descargar la solución creada en Visual Studio 2005 que -- incluye el ensamblado iText# y -- como ejemplo une dos papers bastante interesantes ("Composable Memory Transactions" y "Static Typing Where Posible, Dynamic Typing When Needed: The End of The Cold War Between Programming Languages").

Nota: La clase está basada en el artículo Merge PDF files with iText.

Categories
Firefox Miniposts

Planeta Firefox

Nació un nuevo Planeta Firefox, aunque no sé que tanto se pueda escribir sobre Firefox, este pequeño blog está en la lista de colaboradores.

Si desean formar parte de ese planeta, escriban a alex@planetafirefox.com.