BETERE beveiliging van WEBTOEPASSINGEN: THREATS AND COUNTERMEASURES: correcties en opmerkingen

Vertaalde artikelen Vertaalde artikelen
Artikel ID: 867600
Alles uitklappen | Alles samenvouwen

Samenvatting

Dit artikel bevat opmerkingen, correcties en informatie over bekende fouten met betrekking tot het boek Microsoft patronen & PracticesBetere beveiliging van webtoepassingen: Threats and Countermeasures,ISBN 0-7356-1842-9

Webversie van het boek bijgewerkt als We vinden het fouten. Mogelijk veel of alle fouten onder al gecorrigeerd in de webversie van het boek op MSDN.

De volgende onderwerpen worden behandeld:
  • Pagina 273, hoofdstuk 10: Gebouw beveiligde ASP.NETTO pagina's en Besturingselementen sectie: Gegevensgebonden besturingselementen volledige sectie
  • Pagina 441, hoofdstuk 16: Beveiliging van uw webserver sectie: NetBIOS en SMB uitschakelen

Meer informatie

Pagina 273, hoofdstuk 10: Gebouw beveiligde ASP.NETTO's en besturingselementen sectie: gegevensgebonden besturingselementen sectie voltooien
http://msdn2.Microsoft.com/en-us/library/aa302426.aspx

Wijzigen:

Gegevensgebonden besturingselementen Web coderen niet uitvoer. Is het enige besturingselement uitvoer codeert TextBox bepalen wanneer de TextMode eigenschap is ingesteld op meerdere regels. Als u een besturingselement aan gegevens binden met schadelijke code XSS, de code worden uitgevoerd op de client. Als een resultaat als u gegevens uit een database ophaalt en kan niet bepaald dat worden de gegevens geldig is (bijvoorbeeld omdat een database die wordt gedeeld met andere toepassingen) codeert gegevens voordat u het doorgeven aan de client.

:

Gegevensgebonden besturingselementen binden web-controls zijn onderdelen van de gegevens via een openbare eigenschap overgenomen DataSource'. Te vermelden een paar zult DataGrid, ListBox en DropDownList zeer vaak worden gebruikt. Niet alle gegevensgebonden besturingselementen voeren codering voor het weergeven van gegevens opgehaald vanuit een component afhankelijke gegevens; Zo kan uw verantwoordelijkheid uitvoeren codering op niet-vertrouwde gegevens onderdelen om te voorkomen XSS-aanvallen. Voor bijvoorbeeld een onderdeel kan niet worden vertrouwd in een scenario waar verschillende toepassingen delen één database. Als een aanvaller de mogelijkheid invoegen schadelijke code XSS in de database (door misbruik van een beveiligingslek in een van de toepassingen, bijvoorbeeld) alle toepassingen met web-controls codering gebonden, schakelt kwetsbaar. Als u bepaalde codering alleen voorkomen dat de uitvoer van het onderdeel gegevens altijd geldig zijn.

Voorbeelden afhankelijke besturingselementen die geen codering worden gegevens DataGrid, DataList, RadioButtonList en CheckBoxList. Uitvoeren van de codering voor een afhankelijk besturingselement kan variëren afhankelijk van elk besturingselement. Bijvoorbeeld voor een DataGrid besturingselement, hebt u de volgende opties:
  • Zet alle kolommen in sjablonen en handmatig gebruiken HtmlEncode()/UrlEncode() op elke aanroep DataBinder.Eval
  • Een van de methoden voor gegevensbinding zoals overschrijven OnDatabinding of OnItemDataBound en codering op de items. De volgende voorbeeld illustreert hoe de methode OnItemDataBound van een DataGrid-besturingselement te coderen items door met de HtmlEncode() of UrlEncode() nodig:

...
[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;
      }
     }
   }
...

Pagina 441, hoofdstuk 16: Beveiliging van uw webserver, sectie: NetBIOS en SMB uitschakelen
http://msdn2.Microsoft.com/en-us/library/aa302432.aspx

Volgende opmerking toegevoegd:

Opmerking: Test uw wijzigingen voordat u ze implementeert in de productie. Delen uitschakelen of NetBIOS kunt negatieve invloed beheersbaarheid voor uw scenario. IIS gebruikt bijvoorbeeld de NetUserChangePassword API die afhankelijk zijn van NetBIOS. Als u gebruikers wachtwoorden wijzigen via IIS, dit zal werken niet meer.

Eigenschappen

Artikel ID: 867600 - Laatste beoordeling: vrijdag 25 maart 2011 - Wijziging: 2.0
Trefwoorden: 
kbdocfix kbdocerr kbmt KB867600 KbMtnl
Automatisch vertaald artikel
BELANGRIJK: Dit artikel is vertaald door de vertaalmachine software van Microsoft in plaats van door een professionele vertaler. Microsoft biedt u professioneel vertaalde artikelen en artikelen vertaald door de vertaalmachine, zodat u toegang heeft tot al onze knowledge base artikelen in uw eigen taal. Artikelen vertaald door de vertaalmachine zijn niet altijd perfect vertaald. Deze artikelen kunnen fouten bevatten in de vocabulaire, zinsopbouw en grammatica en kunnen lijken op hoe een anderstalige de taal spreekt en schrijft. Microsoft is niet verantwoordelijk voor onnauwkeurigheden, fouten en schade ontstaan door een incorrecte vertaling van de content of het gebruik ervan door onze klanten. Microsoft past continue de kwaliteit van de vertaalmachine software aan door deze te updaten.
De Engelstalige versie van dit artikel is de volgende:867600

Geef ons feedback

 

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