MEJORAR seguridad de aplicación WEB: AMENAZAS Y CONTRAMEDIDAS: correcciones y comentarios

Seleccione idioma Seleccione idioma
Id. de artículo: 867600 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

Resumen

En este artículo contiene comentarios, correcciones e información sobre los errores conocidos relacionados con el libro de Microsoft Patterns & Practices mejorar Web Application Security: Threats and Countermeasures, ISBN 0-7356-1842-9

Versión de Web del libro se actualiza como encontramos los errores. Puede encontrar muchos o todos los errores a continuación ya corregido en la versión de web de la libreta en MSDN.

Se tratan los temas siguientes:
  • 273 De página, en el capítulo 10: Building Secure ASP.NET páginas y controles, sección: controles enlazados a datos, complete la sección
  • 441 De página, en el capítulo 16: Seguridad en servidores Web, sección: deshabilitar NetBIOS y SMB

Más información

273 de página, el capítulo 10: Building Secure ASP.NET páginas y controles, sección: controles enlazados a datos, complete la sección
http://msdn2.microsoft.com/en-us/library/aa302426.aspx

cambio:

Controles Web enlazados a datos no codifican la salida. El único control que codifica el resultado es el control TextBox cuando su propiedad TextMode se establece en MultiLine. Si cualquier otro control se enlaza a datos que tiene código XSS malicioso, el código se ejecutará en el cliente. Como resultado, si recupera datos de una base de datos y no puede estar seguro de que los datos son válidos (quizás porque es una base de datos que se comparte con otras aplicaciones), codificar los datos antes de pasar al cliente.

To:

Datos de controles enlazados son controles web que son enlazables a componentes de datos a través de un público heredado ? DataSource ? propiedad. Mencione algunas, podrá encontrar DataGrid, ListBox y DropDownList para utilizarse con mucha frecuencia. Recuperar datos no todos los controles enlazados realizan la codificación al mostrar datos de un componente de datos enlazados; por lo tanto, será su responsabilidad para realizar la codificación en componentes de datos que no sean de confianza para evitar ataques XSS. Por ejemplo, un componente de datos no puede ser de confianza en un escenario donde las distintas aplicaciones comparten una única base de datos. Si un atacante tiene la capacidad para insertar código XSS malicioso en la base de datos (por aprovecharse una vulnerabilidad en una de las aplicaciones, por ejemplo) todas las aplicaciones mediante controles de web de codificación no enlazados a él, se volverán vulnerables. Evite sólo codificación si puede estar seguro de que el resultado del componente de datos siempre será válido.

Ejemplos de controles de datos enlazados que no realizan la codificación son DataGrid, DataList, RadioButtonList y CheckBoxList. Realizar la codificación para un tipo de datos puede variar control dependiente en función de cada control específico. Por ejemplo, para un control DataGrid control, tiene las opciones siguientes:
  • Convertir todas las columnas en las plantillas y utilizar HtmlEncode()/UrlEncode() manualmente en cada llamada a DataBinder.Eval
  • Reemplazar uno de sus métodos DataBinding, como OnDatabinding o OnItemDataBound y realizar la codificación en sus elementos. En el ejemplo siguiente se muestra cómo reemplazar el método OnItemDataBound de un control DataGrid para codificar sus elementos, ya sea por mediante HtmlEncode() o UrlEncode() cuando sea necesario:

...
[DefaultProperty("Text"),
  ToolboxData("<{0}:DataGrid runat=server></{0}:DataGrid>")]
 
public class DataGrid : System.Web.UI.WebControls.DataGrid
{
    /// <summary>
    /// The ItemDataBound event is raised after an item is data bound to the DataGrid
    /// control. This event provides you with the last opportunity to access the data
    /// item before it is displayed on the client. After this event is raised, the data
    /// item is nulled out and no longer available. - .NET Framework Class Library
    /// </summary>
    /// <param name="e"></param>
    protected override void OnItemDataBound(DataGridItemEventArgs e)
    {
      base.OnItemDataBound (e);
 
      switch (e.Item.ItemType)
      {
        case ListItemType.Item:
        case ListItemType.AlternatingItem:
        case ListItemType.EditItem:
        case ListItemType.SelectedItem:
        case ListItemType.Footer:
        case ListItemType.Header:
        case ListItemType.Pager:  
          // even though not all of these ListItemTypes are data bound,
          // perform HtmlEncode or UrlEncode on each control. If there are
          // no controls, we perform HtmlEncode on any available text.
          // Also, don't let &nbsp;'s be encoded.
          TableCellCollection cCells = e.Item.Cells;
          foreach (TableCell tc in cCells)
          {
            if (tc.Controls.Count > 0)
            {
              foreach (Control ctrl in tc.Controls)
              {
                
                // don't perform HtmlEncode on URL's
                if (ctrl is HyperLink)
                {
                  HyperLink hLnk = (HyperLink)ctrl;
 
                  if (hLnk.Text.Length > 0)
                    hLnk.Text = HttpUtility.HtmlEncode(hLnk.Text);
                  if (hLnk.NavigateUrl.Length > 0)
                    hLnk.NavigateUrl = HttpUtility.UrlEncode(hLnk.NavigateUrl);
                }
                else if (ctrl is LinkButton)
                {
                  LinkButton lButton = (LinkButton)ctrl;
 
                  if (lButton.Text.Length > 0)
                    lButton.Text = HttpUtility.HtmlEncode(lButton.Text);
                }
                else if (ctrl is Button)
                {
                  Button cButton = (Button)ctrl;
 
                  if (cButton.Text.Length > 0)
                    cButton.Text = HttpUtility.HtmlEncode(cButton.Text);
                }
              }
            } 
            else 
            {              
              // there are no controls in the table cell
              // HTMLEncode any available text
              if (tc.Text.Length > 0) 
              {
                if ("&nbsp;" != tc.Text) 
                  tc.Text = HttpUtility.HtmlEncode(tc.Text);
              }
            }
          }
          break;
        
        default:
          break;
      }
     }
   }
...

441 de página, el capítulo 16: seguridad en servidores Web, sección: deshabilitar NetBIOS y SMB
http://msdn2.microsoft.com/en-us/library/aa302432.aspx

se agrega la siguiente Nota:

Nota: Pruebe los cambios antes de implementarlos en producción. Deshabilitar compartir o NetBIOS puede afectar negativamente facilidad de administración para su escenario. Por ejemplo, IIS utiliza la API de NetUserChangePassword que depende de NetBIOS. Si permite que los usuarios cambiar las contraseñas a través de IIS, ya no funcionará.

Propiedades

Id. de artículo: 867600 - Última revisión: martes, 8 de mayo de 2007 - Versión: 1.4
La información de este artículo se refiere a:
  • MSPRESS Improving Web Application Security: Threats and Countermeasures, ISBN 0-7356-1842-9
Palabras clave: 
kbmt kbdocfix kbdocerr KB867600 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 867600

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com