2012-02-22 1 views
4

Les contrôles, qui font partie de l'ensemble de contrôles ASP.Net par défaut - ALL utilisent-ils viewstate ou controlstate en permanence?Les contrôles ASP.Net exposent-ils des requêtes SQL via viewstate?

Si je dépose le code ci-dessous sur un tout nouveau formulaire Web, ma chaîne SQL est-elle placée dans un état de contrôle non crypté?

<asp:SqlDataSource ID="mobileData" runat="server" 
     DataSourceMode="DataReader" 
     SelectCommand="SELECT * from ma.bob WHERE Vendor IS NOT NULL" 
/> 

Je suis au courant de la façon de chiffrer et viewstate ControlState, mais il me semble fou que ce cas d'utilisation commune pourrait être si effroyablement insécurité. Sûrement on pourrait effectuer une attaque par injection SQL en modifiant le controlstate?

Je pense que la plupart des gens pensent crypter controlstate pour les applications sensibles, mais en réalité, si ma supposition est vraie - alors cela devrait toujours être fait - et visual studio devrait l'activer par défaut? Est-ce que je pense à cela correctement, ou est-ce que j'ai la mauvaise extrémité du bâton?

+1

Vous pouvez donner votre avis: http://programmers.stackexchange.com/questions/115374/using-sqldatasource-databound-controls-in-asp-net-bad-practice – NotMe

+0

Pourquoi est-ce que la chaîne aller dans ViewState ou ControlState? C'est statique. –

Répondre

1

Pour répondre à votre question, no.
De MSDN

Pour des raisons de sécurité, la propriété SelectCommand ne sont pas stockées est l'état d'affichage. Parce qu'il est possible de décoder le contenu de l'état de la vue sur le client, le stockage des informations sensibles sur la structure de la base de données dans l'état d'affichage peut entraîner une vulnérabilité de divulgation d'informations .

+0

Merci beaucoup d'avoir éclairci ça pour moi :-) – RobD

+0

@RobD - Mon plaisir mec. –

1

Cette information n'est jamais stockée dans ViewState.

Toutes les propriétés sont créées comme celui-ci

public string SomeProperty 
     { 
      get 
      { 
       object obj = ViewState["SomeProperty"]; 
       return (obj == null) ? 0 : (string)obj; 
      } 
      set 
      { 
       ViewState["SomeProperty"] = value; 
      } 
     } 

SelectCommand ici est attribué dans un produit C#/classe Vb par le PageParser. Cette classe contiendra une ligne comme

mobileData.SelectCommand="SELECT * from ma.bob WHERE Vendor IS NOT NULL" 

et cette affectation est effectuée chaque fois que la page est demandée. ASP .Net n'a pas besoin de garder cela dans ViewState.


Toutefois, si vous faites quelque chose comme

<asp:HiddenField runat="server" Value="SELECT * from ma.bob WHERE Vendor IS NOT NULL" /> 

Ce sera le ViewState (ce que je dis à propos de l'analyseur est vrai ici aussi, mais le compositeur implémente ici ce mécanisme ViewState)

+2

Avez-vous une source faisant autorité qui l'indique? – Oded

+2

@Oded - http://stackoverflow.com/a/9401030/422219 – zeroef

Questions connexes