Il POTENZIAMENTO SECURITY di applicazione WEB: PERICOLI E CONTROMISURE: correzioni e commenti

Traduzione articoli Traduzione articoli
Identificativo articolo: 867600 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

Sommario

In questo articolo contiene commenti, le correzioni e informazioni su errori noti relativi alla Rubrica di Microsoft Patterns & Practices miglioramento della protezione delle applicazioni Web: pericoli e contromisure, ISBN 0-7356-1842-9

Versione di Web del libro viene aggiornata come trovare gli errori. ╚ possibile trovare molti o tutti gli errori seguito giÓ corretto nella versione web del libro su MSDN.

Vengono trattati i seguenti argomenti:
  • Pagina 273, capitolo 10: Building Secure ASP.NET pagine e controlli, sezione: i controlli con associazione a dati, completare la sezione
  • Pagina 441, capitolo 16: Protezione del Server Web, sezione: Disattiva NetBIOS e SMB

Informazioni

pagina 273, capitolo 10: Building Secure ASP.NET pagine e controlli, sezione: i controlli con associazione a dati, completare la sezione
http://msdn2.microsoft.com/en-us/library/aa302426.aspx

Modifica:

Controlli Web con associazione a dati non la codifica output. L'unico controllo che codifica l'output Ŕ il controllo TextBox quando la proprietÓ TextMode Ŕ impostata su MultiLine. Se si associa qualsiasi altro controllo ai dati contenente codice XSS dannoso, Ŕ possibile che il codice verrÓ eseguito sul client. Di conseguenza, se si recuperano dati da un database e non Ŕ possibile che i dati sono validi (magari perchÚ Ŕ un database condiviso con altre applicazioni), codificare i dati prima di passare al client.

To:

Dati i controlli associati i controlli web associabili a componenti di dati mediante una pubblica ereditato ? DataSource ? proprietÓ. Parlare pochi, si noterÓ DataGrid, ListBox e DropDownList da utilizzare molto spesso. I dati di non tutti i controlli associati eseguono la codifica quando si visualizzano i dati recuperati da un componente di dati associata; di conseguenza, sarÓ responsabilitÓ dell'utente per eseguire la codifica su componenti di dati non attendibili per impedire gli attacchi XSS. Ad esempio, un componente di dati non pu˛ essere attendibili in uno scenario in cui applicazioni diverse condividono un singolo database. Se un utente malintenzionato ha la capacitÓ di inserire codice XSS dannoso nel database (tramite l'abuso da parte una vulnerabilitÓ in una delle applicazioni, ad esempio) tutte le applicazioni che utilizzano controlli web non codifica associati, diventerÓ vulnerabile. Evitare solo codifica se Ŕ possibile essere certi che l'output dal componente di dati sarÓ sempre valido.

Esempi di controlli dati associati che non eseguono la codifica sono di DataGrid, DataList, RadioButtonList e CheckBoxList. Eseguire la codifica per i dati di controllo associato variano a seconda ogni controllo specifico. Ad esempio, per un DataGrid il controllo, sono disponibili le opzioni seguenti:
  • Trasformare di tutte le colonne in modelli e utilizzare manualmente HtmlEncode()/UrlEncode() a ogni chiamata a DataBinder.Eval
  • L'override di uno dei relativi metodi di associazione dati, ad esempio OnDatabinding o OnItemDataBound ed eseguire gli elementi di codifica. Nell'esempio seguente viene illustrato come eseguire l'override del metodo di OnItemDataBound di un controllo DataGrid per codificare gli elementi da una utilizzando HtmlEncode() o UrlEncode() quando richiesto:

...
[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 di pagina, il capitolo 16: protezione del Server Web, sezione: Disattiva NetBIOS e SMB
http://msdn2.microsoft.com/en-us/library/aa302432.aspx

viene aggiunta la seguente Nota:

Nota: Test le modifiche prima di implementarle nell'ambiente di produzione. Disattivazione di condivisione o NetBIOS pu˛ influire negativamente sulle gestibilitÓ per lo scenario. Ad esempio, IIS utilizza l'API di NetUserChangePassword che dipende da NetBIOS. Se si consente agli utenti di modificare le password tramite IIS, questo non funzionerÓ pi¨.

ProprietÓ

Identificativo articolo: 867600 - Ultima modifica: martedý 8 maggio 2007 - Revisione: 1.4
Le informazioni in questo articolo si applicano a:
  • MSPRESS Improving Web Application Security: Threats and Countermeasures, ISBN 0-7356-1842-9
Chiavi:á
kbmt kbdocfix kbdocerr KB867600 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 867600
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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