Mis Apreciaciones de ASP.NET Dynamic Data

Hla a todos.

Ya muchos hemos probado esta feature que viene con ASP.NET 3.5 SP1, la cual nos ayuda muchísimo a crear un front end para un manejo básico de tablas, a lo que  muchos llamamos el tipo Agregar, Modificar, Actualizar y Eliminar.

Pienso que ya era hora que Microsoft tuviera esta funcionalidad predefinida, ya que antes de que llegara este feature, mucha gente que no conociera  mucho de .NET usaba herramientas de tercero para generar site’s para una administración básica de tablas.

Si ya queremos mejorar lo que trae por defecto e incluir nuevas funcionalidades con otras herramientas, debemos echar código y probar y es hay donde no tendríamos que enviar a los developers a casa (jejej).

También quiero decir que se pasen por la sección de vídeos y le echen una miradita, les darán las bases suficiente para saber de este tema. http://www.asp.net/learn/3.5-SP1/

Algunos ejemplos http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=14473

Nos vemos.

Romny

Mejores practicas de Acceso a Datos Habrá?

Hola a todos, vuelve a escribir después de muchas cosas que no entrare a discutir.

 

Desde la aparición de ADO.NET hasta el día de hoy, varias formas de acceder a los datos almacenados en un motor de base de datos, o en archivos XML, o mas aun en datos de servicios web (ya que esto ahora esta en auge); Me pregunto será que en todas estas formas abra algo de mejores practicas para el modo de acceder a los datos.

Muchos creo que conocer la serie de artículos de cazando mitos en ADO.NET donde nos demuestran a la hora de la verdad cuales de las formas de leer datos en ADO.NET es mejor, donde se puede ver que el dataset no es la mejor forma para usarlo, pero igualmente ah estado presente desde su primera versión de .NET Framework hasta la nueva versión que se esta preparando.

En la pagina principal de la plataforma de desarrollo de datos http://msdn.microsoft.com/es-co/data/default(en-us).aspx, podemos ver todas las formas que hay y las que se están preparando para el acceso a datos. Con toda esta información que hay de la forma de acceso a datos, realmente no se sabe a ciencia cierta que es mejor o que es peor ( o que técnica no usar).

A modo personal pienso que usar cualquier técnica esta bien, siempre y cuando no afectemos el performance o la seguridad de los datos, como de la aplicación y esto va de la mano en la forma como los desarrolladores hacen su trabajo.

Las polemicas no son lo mejor, pero creo que aveces ayudan. Comente.

Saludos.

Romny

Live Search mediante servicios parte II (Imagenes)

Hla a todos.

Prosiguiendo con el tema de usar Live Search mediante servicios Parte I, en la cual hicimos algo sencillo.

Esta vez lo que haremos es buscar imágenes con el api de servicios.

   1: // Agregar la referencia web al proyecto
   2: // http://soap.search.msn.com/webservices.asmx?wsdl
   3:  
   4: MSNSearchService s = new MSNSearchService();
   5: SearchRequest searchRequest = new SearchRequest();
   6:  
   7: SourceRequest[] sr = new SourceRequest[1];
   8: sr[0] = new SourceRequest();
   9: sr[0].Source = SourceType.Image;
  10: sr[0].ResultFields = ResultFieldMask.Description | ResultFieldMask.Image | ResultFieldMask.Title;
  11:  
  12: searchRequest.Query = "Microsoft";
  13: searchRequest.Requests = sr;
  14:  
  15: // Colocar el Id de http://search.live.com/developer 
  16: searchRequest.AppID = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
  17: searchRequest.CultureInfo = "es-ES";
  18:  
  19: SearchResponse searchResponse = s.Search(searchRequest);
  20: foreach (Result sourceResult in searchResponse.Responses[0].Results)
  21: {
  22:     string title, description, imageUrl, imagePageUrl;
  23:     int imageHeight, imageWidth, imageFileSize;
  24:  
  25:     title = (!String.IsNullOrEmpty(sourceResult.Title)) ? sourceResult.Title : "";
  26:     description = (!String.IsNullOrEmpty(sourceResult.Description)) ? sourceResult.Description : "";
  27:     imagePageUrl = (!String.IsNullOrEmpty(sourceResult.Url)) ? sourceResult.Url : "";
  28:     imageUrl = (!String.IsNullOrEmpty(sourceResult.Image.ImageURL)) ? sourceResult.Image.ImageURL : "";
  29:     imageHeight = sourceResult.Image.ImageHeight;
  30:     imageWidth = sourceResult.Image.ImageWidth;
  31:     imageFileSize = sourceResult.Image.ImageFileSize;
  32: }

Y así quedaría en la pagina.

Image

Es algo muy sencillo de lo que se puede hacer con el api de servicios de Live Search, espero que les sirva como introducción en el tema de Live Search.

 

Romny Duarte

Live Search mediante servicios parte I

Hola a todos, prosiguiendo con uno de mis post referente a usar Live Search en nuestros sitios llamando a  una librería de JavaScript, hoy usaremos el mismo servicio pero con la diferencia que lo haremos mediante un servicio.

 

Lo primero que hay que hacer es ir a http://search.live.com/developer registrarnos para conseguir un Id que servirá para poder consumir el servicio. Seguido de esto creamos un web site normal y agregamos el servicio web que se encuentra en http://soap.search.msn.com/webservices.asmx?wsdl, después de agregar la referencia web, se nos crea el siguiente tag en el archivo web.config

   1: <appSettings>
   2:     <add key="com.msn.search.soap.webservices" 
   3:     value="http://soap.search.live.com/webservices.asmx"/>
   4: </appSettings>

Ahora agregamos la siguiente referencia en nuestro *.aspx.cs

   1: using com.msn.search.soap;

Por ahora mostrare como hacer la búsqueda de un parámetro ya establecido y imprimir los resultados en un div.

Nota: La mayor parte del código esta en el sdk http://dev.live.com/livesearch/sdk/ solo eh echo modificaciones para mi necesidad.

   1: static StringBuilder sb = new StringBuilder();
   2:     static StringWriter sw = new StringWriter(sb);
   3:     static XmlWriter writer = new XmlTextWriter(sw);
   4:  
   5:     protected void Page_Load(object sender, EventArgs e)
   6:     {
   7:         
   8:         String appId = "Tu codigo";
   9:  
  10:         String query = "geeks.ms";
  11:  
  12:         try
  13:         {
  14:             MSNSearchService s = new MSNSearchService();
  15:             SearchRequest searchRequest = new SearchRequest();
  16:  
  17:             SourceRequest[] sr = new SourceRequest[1];
  18:             sr[0] = new SourceRequest();
  19:             sr[0].Source = SourceType.Web;
  20:             sr[0].ResultFields = ResultFieldMask.All;
  21:             sr[0].Count = 50; // Resultados maximos
  22:  
  23:             searchRequest.Query = query;
  24:             searchRequest.Requests = sr;
  25:             searchRequest.AppID = appId;
  26:             searchRequest.CultureInfo = "es-ES";
  27:             searchRequest.SafeSearch = SafeSearchOptions.Moderate;
  28:             searchRequest.Flags = SearchFlags.DisableHostCollapsing
  29:                 | SearchFlags.DisableSpellCorrectForSpecialWords | SearchFlags.MarkQueryWords;
  30:  
  31:             SearchResponse searchResponse = s.Search(searchRequest);
  32:  
  33:             // Obtener el numero total de resultados de la busqueda
  34:             int totalResults = searchResponse.Responses[0].Total;
  35:  
  36:             // Iterar a traves de los resultados
  37:             foreach (Result sourceResult in searchResponse.Responses[0].Results)
  38:             {
  39:                 string Titulo, Descripcion, Url;
  40:  
  41:                 // Sacar los datos solicitados de la busqueda
  42:                 if (!String.IsNullOrEmpty(sourceResult.Title))
  43:                 {
  44:                   
  45:                     Titulo = sourceResult.Title.Replace("xe000", "<b>").Replace("xe001", "</b>");
  46:  
  47:                 }
  48:  
  49:                 if (!String.IsNullOrEmpty(sourceResult.Description))
  50:                 {
  51:                     Descripcion = sourceResult.Description.Replace("xe000", "<b>").Replace("xe001", "</b>");
  52:                 }
  53:  
  54:                 Url = (!String.IsNullOrEmpty(sourceResult.Url)) ? sourceResult.Url : "";
  55:  
  56:                 // Imprimir resultados
  57:                 _renderResults(writer, sourceResult);
  58:             }
  59:         }
  60:         catch (Exception exception)
  61:         {
  62:             // 
  63:         }
  64:  
  65:         // a hack to get the search terms bolded in the pretty output.
  66:         sb = sb.Replace("xe000", "<b>").Replace("xe001", "</b>");
  67:         Resultados.InnerHtml = sb.ToString();
  68:  
  69:     }
  70:     /// <summary>
  71:     /// Escribir los resultados en la pagina web
  72:     /// </summary>
  73:     /// <param name="writer"></param>
  74:     /// <param name="result"></param>
  75:     protected void _renderResults(XmlWriter writer, Result result)
  76:     {
  77:         writer.WriteStartElement("p");
  78:  
  79:         // Titulo
  80:         if (!String.IsNullOrEmpty(result.Title))
  81:         {
  82:             writer.WriteString("Titulo: " + result.Title);
  83:             writer.WriteStartElement("br"); writer.WriteEndElement(/*br*/);
  84:         }
  85:  
  86:         // Descripcion
  87:         if (!String.IsNullOrEmpty(result.Description))
  88:         {
  89:             writer.WriteString("Descripción: " + result.Description);
  90:             writer.WriteStartElement("br"); writer.WriteEndElement(/*br*/);
  91:         }
  92:  
  93:         // Url
  94:         if (!String.IsNullOrEmpty(result.Url))
  95:         {
  96:             writer.WriteString("Url: " + result.Url);
  97:         }
  98:  
  99:         writer.WriteEndElement(/*p*/);
 100:         writer.WriteStartElement("hr");
 101:         writer.WriteEndElement(/*hr*/);
 102:     }

 

Api

A esta altura, solo hemos enviado una petición al Api de servicio de Live Search y el nos devolvió unos datos con las opciones que solicitamos.

Espero que les halla agradado el breve ejemplo.

Saludos

Romny.

Validar DropDownList con RequiredFieldValidator y CustomValidator

Hola amigos de Geeks, Revisando la entrada de Marc Rubiño referente a Como Validar un ListBox (CustomoValidator), me acorde de lo tedioso que es la parte de validación y cuando estaba empezando lo que era validar un DropDownList.

Mostrare tres ejemplos de como validar este control de forma sencilla.

  1. Validar DropDownList con datos manuales

En este caso, vamos a validar con datos ingresados manualmente.

   1: <asp:DropDownList id="fecha" runat="server">
   2:             <asp:ListItem>--------</asp:ListItem>
   3:             <asp:ListItem >01/08</asp:ListItem>
   4:             <asp:ListItem >02/08</asp:ListItem>
   5:             <asp:ListItem >03/08</asp:ListItem>
   6:             <asp:ListItem >04/08</asp:ListItem>
   7:             <asp:ListItem >05/08</asp:ListItem>
   8:             <asp:ListItem >06/08</asp:ListItem>
   9:             <asp:ListItem >07/08</asp:ListItem>
  10:             <asp:ListItem >08/08</asp:ListItem>
  11:             <asp:ListItem >09/08</asp:ListItem>
  12:             <asp:ListItem >10/08</asp:ListItem>
  13:             <asp:ListItem >11/08</asp:ListItem>
  14:             <asp:ListItem >12/08</asp:ListItem>
  15: </asp:DropDownList>

Y ahora con el RequiredFieldValidator hacemos lo siguiente.

   1: <asp:RequiredFieldValidator id="rfvFecha" 
   2: ControlToValidate="fecha" ErrorMessage="Seleccione Fecha. 
   3: " Display="Static" InitialValue="--------" runat="server"/>

Y la respectiva imagen.

validar1 

2. Validar DropDownList con RequiredFieldValidator

En este ejemplo, vamos a validar con un RequiredFieldValidator pero en este caso será con una fuente de datos.

   1: <asp:DropDownList ID="DropDownList1" runat="server" 
   2:         DataSourceID="SqlDataSource1" DataTextField="ProductName" 
   3:         DataValueField="ProductName" AppendDataBoundItems="True">
   4:             <asp:ListItem>Seleccione un producto</asp:ListItem>
   5: </asp:DropDownList>
   6:     <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
   7:         ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" 
   8:         SelectCommand="SELECT [ProductName] FROM [Alphabetical list of products]">
   9:     </asp:SqlDataSource>

El RequiredFieldValidator quedaría de la siguiente forma.

   1: <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
   2:         ErrorMessage="Seleccione un producto." 
   3: ControlToValidate="DropDownList1" InitialValue="Seleccione un producto"/>

La respectiva imagen.

validar2

3. Validar DropDownList con CustomValidator y JavaScript

En nuestro ejemplo final, validaremos con un CustomValidator y JavaScript.

   1: <asp:DropDownList ID="DropDownList1" runat="server" 
   2:         DataSourceID="SqlDataSource1" DataTextField="ProductName" 
   3:         DataValueField="ProductName" AppendDataBoundItems="True">
   4: </asp:DropDownList>
   5: <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
   6:         ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" 
   7:         SelectCommand="SELECT [ProductName] FROM [Alphabetical list of products]">
   8: </asp:SqlDataSource>

Algo diferente que tiene de nuestro anterior ejemplo es que no agregamos el campo donde dice «Seleccione el producto» en el diseñador, pero igual tiene la propiedad AppendDataBoundItems=»True», lo que haremos es hacerlo mediante código.

La función JavaScript seria la siguiente, como observaran nada complicado.

   1: <script type="text/javascript">
   2:     function ValidaDDL(source, arguments) {
   3:         if (arguments.Value < 1) {
   4:             arguments.IsValid = false;
   5:         }
   6:         else {
   7:             arguments.IsValid = true;
   8:         }
   9:     } 
  10: </script>

Ahora el CustomValidator

   1: <asp:CustomValidator ID="CustomValidator1" runat="server" 
   2:      ClientValidationFunction="ValidaDDL" ControlToValidate="DropDownList1" 
   3:      ErrorMessage="Selecione un produrcto." ValidateEmptyText="True">
   4: </asp:CustomValidator>

Para terminar la línea de código pendiente.

   1: DropDownList1.Items.Insert(0, new ListItem("Seleccione un producto", "0"));

La imagen de muestra.

validar3

Para tener en cuenta.

  • Si usas el RequiredFieldValidator y agregas un nuevo campo, para que no aparezca un dato de una seleccionado, tener en cuenta que el valor de la propiedad InitialValue=»» Debe ser igual al texto que colocaste en ese campo agregado.
  • Con CustomValidator puedes usar funciones JavaScript y hacer el mismo trabajo que con RequiredFieldValidator, pero puedes enriquecer el JavaScript y darle mas funcionalidad, ya es cuestión de gustos.

Bueno espero que les sea de utilidad.

Romny

Documentar Sitios Web Con SandCastle

Buenas a todos, Después de un descanso forzoso vuelvo a la carga, tengo varios Drafts pendientes, pero hoy me los eh saltado, básicamente por una razón sencilla, ayer estuve en el Webcast de El Bruno sobre Visual Studio Team System «Cabe mencionar que bruno es una eminencia»; miraba como el demostraba el proceso de documentar la aplicación con SandCastle en los Build.

La cuestión es que la documentación de una aplicación es algo importante, todos los sabemos, la mayoría usamos SandCastle para esto, pero este proceso se complica un poco cuando son aplicaciones Web; SandCastle requiere de la DLL y de un XML que una aplicación windows es fácil generar estos archivos.

Una aplicación tipo Web es muy diferente en ese aspecto, podemos generar las DLL usando la publicación directamente en VS o con la herramienta Aspnet_compliler, pero como generamos los archivos XML asociados a esas DLL’s.

Bueno para resolver este inconveniente momentáneo usamos la herramienta Documenting Web Projects que pertenece al pack de Sandcastle Styles. Demostrare como generar la documentación con estas herramientas.

Requisitos:

Para usar el Documenting Web Projects debemos registrar la dll EWSoftware.CodeCom.dll mediante el comando gacutil,

gacutil -i DotNet20WebWebCodeProvidersBinReleaseEWSoftware.CodeDom.dll

La otra forma es copiar la DLL a la carpeta bin de nuestro Web Site.

Usare Employee Info Starter Kit para genera un sitio Web, Cuando tenga mi sitio Web funcionando, agregare al archivo web.config el siguiente tag al tag de <configuration>

   1: <system.codedom>
   2:     <compilers>
   3:       <compiler language="c#;cs;csharp" extension=".cs" 
   4:                 compilerOptions="/docpath:C:Publishemployee-info-web-starter-kit"
   5:                 type="EWSoftware.CodeDom.CSharpCodeProviderWithDocs,
   6:                   EWSoftware.CodeDom, Version=1.0.0.0, Culture=neutral,
   7:                   PublicKeyToken=d633d7d5b41cbb65" />
   8:     </compilers>
   9:   </system.codedom>

 

Compilamos y publicamos para que nos genere la DLL con su respectivo archivo XML. Ahora ya podemos usar SandCastle Help File Builder para generar la documentación.

SHFB

Después de hacer los cambios respectivos, compilamos para generar el archivo de documentación.

SHFB1

S@ludos.

Romny Duarte.

Live Search en nuestra web

La verdad no sabia que colocar en el titulo del post, estuve dando vueltas y bueno vamos a ver como nos va.

Últimamente ando con la fiebre de Windows Live Dev, hacer mención de lo que es no estaría mal, pero creo que ya todos sabes lo que es.

Para dar comienzo con lo que eh aprendido, vamos a integrar el buscador de Windows live Search en un sitio web, la idea es como buscar un texto en Windows Live Search. Por ahora claro, en otros post iremos complicando las cosas, ya que para comunicarse con Windows Live Search hay varias formas.

Primero creamos nuestro sitio web, luego crearemos un control de usuario al cual le agregamos el siguiente código.

   1: <asp:Panel ID="Panel1" runat="server" Height="50px" Width="125px">
   2:     <!-- Live Search -->
   3:     <meta name="Search.WLSearchBox" content="1.1, en-GB" />
   4:     <div id="WLSearchBoxDiv">
   5:     <table cellpadding="0" cellspacing="0" style="width: 180px">
   6:         <tr id="WLSearchBoxPlaceholder">
   7:             <td style="width: 100%; border: #DBD8D1 1px solid;">
   8:             <input id="WLSearchBoxInput" type="text" value="&#x4c;&#x6f;&#x61;&#x64;&#x69;&#x6e;&#x67;&#x2e;&#x2e;&#x2e;" 
   9:                     disabled="disabled" style="padding:0;
  10:                     background-image: url(https://search.live.com/s/siteowner/searchbox_background.png);
  11:                     background-position: right;background-repeat: no-repeat;height: 16px; width: 100%;
  12:                     border:none 0 Transparent" />
  13:             </td>
  14:             <td>
  15:                 <input id="WLSearchBoxButton" type="image" src="img/go_off.gif" 
  16:                 align="bottom" style="padding:0;border-style: none" />
  17:             </td>
  18:         </tr>
  19:     </table>
  20:     </div>
  21:     <!-- Live Search -->
  22: </asp:Panel>

Seguidamente anexamos el siguiente código JavaScript.

   1: <script type="text/javascript" charset="utf-8">
   1:  
   2:     var WLSearchBoxConfiguration =
   3:         {
   4:             "global": {
   5:                 "serverDNS": "search.live.com",
   6:                 "market": "en-GB"
   7:             },
   8:             "appearance": {
   9:                 "autoHideTopControl": false,
  10:                 "width": 600,
  11:                 "height": 400,
  12:                 "theme": "Yellow"
  13:             },
  14:             "scopes": [
  15:                 {
  16:                     "type": "web",
  17:                     "caption": "&#x57;&#x65;&#x62;",
  18:                     "searchParam": ""
  19:                 }
  20:             ]
  21:         }

</script>

Y.

   1: <script type="text/javascript" charset="utf-8" 
   2:   src="http://search.live.com/bootstrap.js?market=en-GB&ServId=SearchBox&ServId=SearchBoxWeb&Callback=WLSearchBoxScriptReady">
   1:  

</script>

Live

Con este código JavaScript le indicamos que el texto ah buscar lo haga en search.live.com y que además para hacer la búsqueda use la librería bootstrap.js que se encuentra en http://search.live.com/bootstrap.js

Ahora a probar.

Live1

Si queremos restringir la búsqueda a nuestro sitio en particular, debemos anexar en el JavaScript lo siguiente, para probar colocare la web de Geeks.Ms

   1: "searchParam": http://geeks.ms

Probamos otra vez.

Live2

Algunos links de interés.

Search Live Developer Center.

http://search.live.com/developer/default.aspx?FORM=PDPM

Dev Live

http://dev.live.com/

 

Romny Duarte.

Capitulos gratis del libro ASP.NET 3.5 for Dummies

Bueno pasaba para comentarles que estan disponibles para descargar algunos capitulos del libro ASP .NET 3.5 For Dummies, los capitulos que estan disponibles son estos.

  • Chapter 5: Handling User Input and Events
    In this Chapter we cover gathering data and pushing buttons, using drop-down lists and list boxes, presenting multiple choices, and sending data with forms.
  • Chapter 7: LINQ as a Data Language
    In this Chapter we look at using From, Where, and Select clauses, filtering, grouping, and narrowing scope, aggregating, creating and querying XML with LINQ, and using object initializers.
  • Chapter 8: Using LINQ to SQL and the LinqDataSource
    Diving deeper into LINQ, we’ll cover using the object relational designer, filtering data in LinqDataSource, understanding LINQ to SQL syntax, grouping and displaying hierarchical data, updating and inserting with DataContext, and creating a user interface with the ListView control.
  • Chapter 15: Enhancing Pages with the AJAX Control Toolkit
    In this Chapter we cover completing data as users type, using a lookup Web service, masking and watermarking text boxes, creating a pop-up calendar, and keeping content on top.
  • Los puedes descargar de este link de msdn

    Romny

    Tips de SQL Injection : How to

    Hola, compañeros de geeks.

    Bueno quisiera dejar unos tips para aquellas personas que deseen probar, conocer y demás acerca de esta técnica, como mencione en mi post anterior, esta vulnerabilidad va mas ligada a la forma en que los desarrolladores hacen su trabajo.

    Tip 1.

    Primero dejar el link de un vídeo en msdn del señor Todd Miranda

    How Do I: Prevent a SQL Injection Security Flaw in an ASP.NET Application?

    En este vídeo nos muestran con lujo de detalles con realizar un ataque con esta técnica y también como podemos prevenirla.

    A modo de dato se recomienda desconfiar de toda la data que se puede ingresar en nuestra aplicación, por medio de cajas  de texto y demás controles que nos permiten capturar datos de los usuarios.

    Tip 2.

    Segundo es dejar el enlace de un articulo llamado.

    How To: Protect From SQL Injection in ASP.NET

    en este articulo podemos ver las distintas técnicas de desarrollo que podemos usar para limitar esta vulnerabilidad en nuestras aplicaciones.

    Básicamente las técnicas son:

    • Validar y restringir cada campo, por ejemplo no permitir que en un campo de números, se diligencie con letras.
    • Usar procedimientos almacenados con parámetros.
    • usar parámetros en las sentencias SQL. (un ejemplo del articulo)
       1: using System.Data;
       2: using System.Data.SqlClient;
       3:  
       4: using (SqlConnection connection = new SqlConnection(connectionString))
       5: {
       6:   DataSet userDataset = new DataSet();
       7:   SqlDataAdapter myDataAdapter = new SqlDataAdapter(
       8:          "SELECT au_lname, au_fname FROM Authors WHERE au_id = @au_id", 
       9:          connection);                
      10:   myCommand.SelectCommand.Parameters.Add("@au_id", SqlDbType.VarChar, 11);
      11:   myCommand.SelectCommand.Parameters["@au_id"].Value = SSN.Text;
      12:   myDataAdapter.Fill(userDataset);
      13: }
    • ………

    Bueno espero que sea de utilidad, y les recomiendo ver el video, es muy bueno.

    Romny

    SQL Injection "Complemento"

    Hola.

    Solo queria dar un breve complemente a lo que dijo Rodrigo sobre SQL Injection y al problema que tubo Gustavo en su portal de sharepoint sobre Sql injection por el metodo de url.

    La verdad habia comentado alguna vez de la existencia de un pequeño manual, tutorial de este tema, el señor Steve Friedl’s nos comenta en su blog algunos tips en donde se muestra el poder que tiene esta tecnica; Tambien comentaba como la primera edición de la operacion Net Protector «La primera» daba algunas pautas de este tema y demostraban de como sin importar el tipo de lenguaje que uses tanto libre como propietario sufren de este sintoma. Aunque cabe resaltar que esta vulnerabilidad se da por el codigo que genera el programador, mas no por la tecnologia que se usa.

    Saludos.