IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Translation de VB.net vers C#


Sujet :

ASP.NET

  1. #61
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 193
    Par défaut
    soit tu utilises un Int64.TryParse (la plus propre)


    soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string value=new Dmanager("DataDev").RetournerScalaire("EXEC dbo.CORE_PageIdDefault '" + urlsite + "'")
    if(!string.isNullOrEmpty(value)) IdPage=Int64.Parse(value);
    soit encore tu ajoutes/changes ta procedure pour qu'elle fasse le cast et tu stocks la valeur dans un "Int64?"

  2. #62
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Merci, ça marche trés bien.

  3. #63
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Me voici confronté à mon premier problème de new.

    J'ai fait un procédure pour accrocher différentes choses à ma page tel que MasterPage et Fichier CSS.

    Voici le code complet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    public static void ConstruirePage(Page Lapage, Int64 IdPage)
            {
                DataTable PageInfo = new Dmanager("DataDev").RetournerTable("EXEC dbo.CORE_PageInfo " + IdPage);
                Lapage.MasterPageFile = "~/MasterPage/" + PageInfo.Rows[0][2].ToString() + ".master";
                Lapage.Title = PageInfo.Rows[0][1].ToString();
                System.Web.UI.HtmlControls.HtmlLink css = new System.Web.UI.HtmlControls.HtmlLink();
                css.Attributes["rel"] = "stylesheet";
                css.Attributes["type"] = "text/css";
                css.Attributes["media"] = "all";
                switch (HttpContext.Current.Request.Browser.Browser.ToString())
                {
                    case "IE": css.Href = "~/App_Themes/" + PageInfo.Rows[0][3].ToString() + "/" + PageInfo.Rows[0][3].ToString() + "IE.css";
                        break;
                    case "Firefox": css.Href = "~/App_Themes/" + PageInfo.Rows[0][3].ToString() + "/" + PageInfo.Rows[0][3].ToString() + "FF.css";
                        break;
                    default: css.Href = "~/App_Themes/" + PageInfo.Rows[0][3].ToString() + "/" + PageInfo.Rows[0][3].ToString() + ".css";
                        break;
                }
                Lapage.Header.Controls.Add(css);
            }
    Le truc est simple je récupère dans la BDD des infos et je les charge dans les différents endroits de la page.

    Là, il me plante sur la dernière ligne, il me dit :
    La référence d'objet n'est pas définie à une instance d'un objet.
    Pourtant j'ai fait un new sur le css. Je comprends pas.

    Vous avez une idée ?

  4. #64
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 193
    Par défaut
    La solution 2-3 sont a éviter car pouvant générer des exceptions

  5. #65
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 193
    Par défaut
    si ca plante à la derniere ligne
    vu que tu as assigné des propriétés de "LaPage" et de "css" , je dirai que
    LaPage.Header vaut null

    un petit watch devrait t'aider

  6. #66
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    J'ai trouvé : j'appelle ma procédure à partir du Pre_init et à ce moment le Header n'existe pas encore !!!
    Mais l'ennui c'est que dans le Init la MasterPage veut pas ce placer. Elle ne peut se mettre en palce que dans le Pre_Init !!!

    Bon, ben je suis reparti pour une bonne conception sur papier, je vais en profiter pour revoir toute ma gestion de sécurité du même coup.

    Bonne fin de journée à tous.

  7. #67
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Bizarre ton histoire... et en VB ça marchait ?

  8. #68
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    Bonjour, soit tu peux attraper l'exception, soit tu peux utiliser Int64.TryParse(string)

  9. #69
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Bizarre ton histoire... et en VB ça marchait ?
    Heu non, plus, mais vu que j'ai programmé ça y a trois ans, je m'en souvenais plus !!!

    Mais c'est pas grave. ça va m'obliger à refaire la conception du truc dans les profondeurs et ça va être mieux à la fin.

    Bonne soirée à tous.

  10. #70
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    C'est moi, ou le DataTable PageInfo = new Dmanager("DataDev").RetournerTable("EXEC dbo.CORE_PageInfo " + IdPage);ca laisse quand meme la possibilité d'une injection SQL ?

  11. #71
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Nathanael Marchand Voir le message
    C'est moi, ou le DataTable PageInfo = new Dmanager("DataDev").RetournerTable("EXEC dbo.CORE_PageInfo " + IdPage);ca laisse quand meme la possibilité d'une injection SQL ?
    Bah en l'occurrence non, vu que IdPage est un Int64...

    Mais effectivement, les requêtes construites par concaténation, c'est maaaal, comme je l'ai déjà mentionné plus haut

  12. #72
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Flute, c'était celle la que je voulais quoter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Int64 IdPageDefault = Convert.ToInt64(new Dmanager("DataDev").RetournerScalaire("EXEC dbo.CORE_PageIdDefault '" + urlsite + "'"));

  13. #73
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Nathanael Marchand Voir le message
    Flute, c'était celle la que je voulais quoter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Int64 IdPageDefault = Convert.ToInt64(new Dmanager("DataDev").RetournerScalaire("EXEC dbo.CORE_PageIdDefault '" + urlsite + "'"));
    Ah oui, ça c'est dangereux... enfin ça dépend de l'origine de urlsite bien sûr, mais avec une requête paramétrée ce serait mieux

  14. #74
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    d'autant que ca coute pas cher de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Int64 IdPageDefault = Convert.ToInt64(new Dmanager("DataDev").RetournerScalaire("EXEC dbo.CORE_PageIdDefault @urlSite", new List<SqlParameter> { new SqlParameter("@urlsite", urlsite );});
    et de changer RetournerScalaire pour qu'il prenne du texte et une liste de sqlparameters


    Enfin, je dis ca, je dis rien

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  15. #75
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Bonjour à tous.

    Ben avant de me mettre à faire des procédures stockées je me suis renseigné du côté SQL et ils m'ont dis que c'était safe.

    Dans le cas de la proc avec urlsite je récupère le Request.Url.Host, donc tranquille, on va dire.
    Mais globalement vu que les chaine sont envoyé dans un paramettre de Proc Stock il n'y pas moyen de faire de l'injection. La chaine sera traité comme une chaine, tout simplement.
    Donc si elle correspond, la proc renvoi bine, sinon, elle renvoi une erreur.

    Maintenant si vous voyez un moyen de contourner cela, je prends.

    Je sais que de faire des requêtes paramettrées ne coute pas chère, mais ça va m'obligé à revoir toute mes requêtes et j'en ai quelques centaines et vu que je suis un poil fainéant.....

    Là on parle d'une proc stock qui prend un paramettre, mais j'en ai certaine où je monte 30 voire 40 paramettres, d'un coup, ça alourdi le code.
    Et puis parfois, j'ai "besoins" de faire de la concaténation pour préparer mes paramettres.

    Mais je garde l'idée dans un coin de ma tête, je ne me ferme pas.

    En gros j'attend de voir si quelqu'un arrive à traverser cette technique pour entrer dans ma base de donnée.

  16. #76
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Il n'empeche que si on t'envoie un urlSite = "a'; DROP DATABASE;", tu te retrouves sans base de données

  17. #77
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    Citation Envoyé par Nathanael Marchand Voir le message
    Il n'empeche que si on t'envoie un urlSite = "a'; DROP DATABASE;", tu te retrouves sans base de données
    presque...

    ce serait :urlSite = "a'; DROP DATABASE;--"

    Bon, après, forcément, ca demande un rien de re-travail, mais ca ne perds pas en lisiblité, et tu gagnerais en sécurité.

    Sur un cas ou tu as 30 paramètres, forcément, ce serait plutot:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    var params = new List<SqlParameter>{
    new SqlParameter("@param1", param1),
    new SqlParameter("@param2", param2),
    new SqlParameter("@param3", param3 ),
    ...
    new SqlParameter("@param30", param30)
    }
    Int64 IdPageDefault = Convert.ToInt64(new Dmanager("DataDev").RetournerScalaire("EXEC dbo.CORE_PageIdDefault @param1 @param2 @param3 ... @param30", params);
    Après, tant qu'a refactoriser, un coup de baguette magique sur RetournerScalaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public static T RetournerScalaire<T>(string query,  List<SqlParameter> params)
    {
       using (var con = new SqlConnection()){
          using (var sc= new SqlCommand()){
                foreach (var obj in params)
                {
                    sc.Parameters.Add(obj);
                }
     
                sc.CommandText = query;
                sc.Connection = con;
                con.Open();
                return (T)(sc.ExecuteScalar());
           }
       }
    }

    (nb: code pas testé, et ecrit a l'arrache, a adapter )

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  18. #78
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Et de plus ca permet au SGBD de garder les plans d'execution en cache! Optim de perf

  19. #79
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Ok, je viens de faire un test avec ça, histoire de pas foutre en l'air ma Base

    urlSite = "a'; DROP TABLE Bidule;--"Bon, d'accord, ma table a disparu !!!

    Donc les conseils que l'on m'a donné il y a trois ans sont bidons.

    Donc tout d'abords : MERCI.
    Et moi qui croyait que j'étais safe.

    Bon, donc je vais modifier mes fonctions RetournerTable et RetournerScalaire.

    Je vais plancher sur ton code Philippe. Mais entre l'implémentation des Parameter et du Using qui sont des notions que je ne connais pas, je pense avoir des soucis.
    Je tente le coup et je reviens si j'ai des soucis

    Encore merci pour cette remarque ô combien importante et démontrée.

  20. #80
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Citation Envoyé par zooffy Voir le message
    urlSite = "a'; DROP TABLE Bidule;--"Bon, d'accord, ma table a disparu !!!

    Donc les conseils que l'on m'a donné il y a trois ans sont bidons.
    Rassure toi on est tous plus ou moins passé par là. Dans un premier temps, le plus simple et le plus rapide est de changer l'utilisateur de la base de données et de restreindre ses droits. Te connecterais-tu avec l'utilisateur "sa"?

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. ConversioN C++.net vers visual C++ mfc
    Par ricky78 dans le forum MFC
    Réponses: 5
    Dernier message: 13/06/2007, 17h03
  2. ASP.net vers Crystal
    Par Fleur-Anne.Blain dans le forum ASP.NET
    Réponses: 3
    Dernier message: 04/05/2007, 09h57
  3. Une solution pour migrer de .NET vers MFC
    Par torNAdE dans le forum MFC
    Réponses: 1
    Dernier message: 03/05/2006, 22h23
  4. Convertion code Delphi.net vers C#
    Par RamDevTeam dans le forum Delphi .NET
    Réponses: 1
    Dernier message: 31/03/2006, 21h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo