Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Newbie en C#, léger problème de sécurité avec VS2008.Net [ Système / Autre ] (Nixeus)

vendredi 27 juin 2008 à 16:32:15 | Newbie en C#, léger problème de sécurité avec VS2008.Net

Nixeus

Bonjour à tous,

Je suis débutant dans le monde .Net, et je viens de faire un petit programme en console, permettant d'envoyer des Mails par le biais d'smtp !

Mon programme fonctionne, mais disons que j'ai juste du "salir" un peu mon code, car sinon  Visual Studio ne voulait pas le compiler ! trop de sécurité tue le code!

Je vous explique :

Je créer une variable AdrDest, de type STRING.

Cette variable sera passé en paramètre comme ceci :

MailAddress

AdressDest = newMailAddress(AdrDest);

Au début de mon programme je déclare ma varibale comme ceci :

String AdrDest;

Le problème est que le programme me sort une erreur de compilation me disant que ma variable AdrDest ne peux pas être vide si elle est utilisée avec MailAdress ! En gros il veux dire qu'une adresse mail ne peux pas être vide ! Ca tombe sous le sens biensur !

Le problème c'est qu'il me dit ca avant que j'ai éxécuté mon programme, et ca....c'est pas cool !

Pour palier à ce problème, j'ai initialisé ma variable AdrDest à bidon@bidon.fr et tout passe.

Seulement c'est crade, je voudrais savoir si il n'y a pas un moyen en .Net de faire ca plus propre !

Merci les Amis  !

je vous laise mon code si vous voulez zieuter !

[code]

using

System;

using

System.Net.Mail;

using

System.Collections.Generic;

using

System.Linq;

using

System.Text;

namespace

ConsoleApplication1

{

classProgram

{

staticvoid Main(string[] args)

{

// Variables

string Pseudo = "", AdrExp = "Bidon@Bidon.fr", AdrDest = "Bidon@Bidon.fr", CC = "Bidon@Bidon.fr", CCI = "Bidon@Bidon.fr", Sujet = "", Msg = "", Path = "FichierBidon";

// Construction du message

System.

Console.ReadLine();

// R,cup¦re les arguments pass,s

int nBParam = 0;

nBParam = args.Length;

int i = 0;

if (nBParam > 0)

{

for (i = 0; i < nBParam-1; i++)// Parcour des arguments pass,s et stockage en variable

{

switch (args [i])

{

case"-P" :

Pseudo=args[i + 1];

break;

case"-E" :

AdrExp = args[i + 1];

break;

case"-D" :

AdrDest = args[i + 1];

break;

case"-C" :

CC = args[i + 1];

break;

case"-H" :

CCI = args[i + 1];

break;

case"-S" :

Sujet = args[i + 1];

break;

case"-M":

Msg = args[i + 1];

break;

case"-F":

Path = args[i + 1];

break;

}

}

}

if (nBParam < 3)

{

System.

Console.WriteLine("Vous devez passer en minimum les parametres : -E, ,-D ,-M ");

System.

Console.WriteLine("");

System.

Console.WriteLine("Rappel des parametres :");

System.

Console.WriteLine("");

System.

Console.WriteLine("-P Pseudo de l'expediteur");

System.

Console.WriteLine("-E Email de l'expediteur ");

System.

Console.WriteLine("-D Email de mon destinataire");

System.

Console.WriteLine("-C Email de mon destinataire en copie");

System.

Console.WriteLine("-H Email de mon destinataire en copie cachee");

System.

Console.WriteLine("-S Mon sujet !! ");

System.

Console.WriteLine("-M Mon message !!");

System.

Console.WriteLine("-F Chemin d'acces vers fichier a joindre");

System.

Console.ReadLine();

}

else

{

MailMessage mail = newMailMessage();

MailAddress AdressCopy = newMailAddress(CC);

MailAddress AdressCopyHiding = newMailAddress(CCI);

MailAddress AdressDest = newMailAddress(AdrDest);

MailAddress AdressExp = newMailAddress(AdrExp,Pseudo);

Attachment Data = newAttachment(Path);

mail.From = AdressExp;

mail.To.Add(AdressDest);

if (CC != "Bidon@Bidon.fr")

{

mail.CC.Add(AdressCopy);

}

if (CCI != "Bidon@Bidon.fr")

{

mail.Bcc.Add(AdressCopyHiding);

}

if (Path != "FichierBidon")

{

mail.Attachments.Add(Data);

}

mail.Subject = Sujet;

mail.Body = Msg;

mail.SubjectEncoding =

Encoding.GetEncoding("iso-8859-1");

mail.BodyEncoding =

Encoding.GetEncoding("iso-8859-1");

 

SmtpClient smtp = newSmtpClient();

smtp.Host =

"smtp.xxxxxxxx.com";

smtp.Port = 25;

// default.

smtp.Credentials =

new System.Net.NetworkCredential("", "");

try

{

smtp.Send(mail);

mail.Dispose();

}

catch (Exception ex)

{

System.

Console.WriteLine(ex);

}

}

}

}

}


[/code]

Merci à tous les amis ! Bonne après midi !

Nixeus'

vendredi 27 juin 2008 à 23:22:56 | Re : Newbie en C#, léger problème de sécurité avec VS2008.Net

Nikoui

Voila d'où vient ton problème :

Tu initialises ta variable AdrDest avec la valeur qui va bien, dans ton switch - ce qui semble donc correct.
Si le compilo n'est pas content, c'est qu'il a une bonne raison de le faire : ton code tel qu'il est fait ne permet pas d'assurer que la variable AdrDest aura forcément une valeur valide lorsque tu arrives à la ligne MailAddress AdressDest = newMailAddress(AdrDest);

Avec les informations dont il dispose (ton code) le compilateur n'a aucun moyen d'être sur que tout les chemins d'execution possible donneront une valeur à AdrDest (et en l'occurence, il a raison, voir plus bas).

La solution est donc d'initialiser ta variable avec une valeur (ce que tu as fait). Ce n'est pas crade, c'est "safe".

(par exemple, il suffit de lancer ton code avec les paramètres "-P toto -P toto -P toto" pour laisser AdrDest à null, ou bien "-P -P -P" pour le planter...)


Working as designed
www.nikoui.fr

samedi 28 juin 2008 à 11:52:10 | Re : Newbie en C#, léger problème de sécurité avec VS2008.Net

Nixeus

Hey mon ami !


Merci de ta réponse !
J'avoue que je m'attendais à ca, mais je pensais qu'il y avait moyen de désactivé cette sécurité dans VS 2008 !

Ils auraient pu mettre un warning ! Je trouve que ca fais un peu assistanat du code !! :) On est censé connaitre les règles de programmation :)

Anfin merci de ta réponse ! :)

Nixeus'

samedi 28 juin 2008 à 22:52:57 | Re : Newbie en C#, léger problème de sécurité avec VS2008.Net

coq

Administrateur CodeS-SourceS
Salut,

Un warning n'aurait pas de sens, c'est une erreur.

"J'avoue que je m'attendais à ca, mais je pensais qu'il y avait moyen de désactivé cette sécurité dans VS 2008 !"
Je pense que la plupart des utilisateurs de C# appeleraient ça une regression :-D

"On est censé connaitre les règles de programmation :)"
Oui, censés... Nos utilisateurs sont censés savoir utiliser nos applis, et pourtant...

Au pire tu as VB.NET qui te permettra de faire ce genre de chose sans raler (par contre le jour où c'est réellement génant pour le fonctionnement, c'est aussi silencieux).


/*
coq
MVP Visual C#
CoqBlog
*/



Cette discussion est classé dans : mail, system, console, writeline, bidon


Répondre à ce message

Sujets en rapport avec ce message

Performances / CIL [ par MorpionMx ] Bonjour a tous, J'ai envie de commencer la journée par une question de performance.Soit un programme minimaliste qui crée un entier i et qui l'affiche déclarer un type word en c# [ par sheebe ] Bonjour, je programme en ce moment en c# une carte à relais permettant d'actionner un gachette de porte pour mon projet de bts  voici mon code:using S Problème multithread [ par froggyinfo ] Bonsoir,Voila j'ai un problème avec un programme multi-thread,J'ai raccourci un peu le code est remplacé les fonctions par des recup1 à 4.Le but du pr WindowsForm et la console ? [ par vash_vador ] Bonjour, Je suis nouveau dans le développements en c# (environ 6mois de pratique), et j'ai un projet mais j'ai un petit problème a résoudre: Mon probl 2ém probléme d'execution [ par sghchafaa ] Sélém Alikom((signifie "Bonjour" en tunisien); voila c'est simple fonction qui cherche le careé ,mais sa marche pas!!!!!!!public class hello{    int Comment utiliser la commande EXIT en C# [ par sghchafaa ] Bonjour;s'il vous plait,pouvez vous m'aider concernat la commande EXIT en C#;;je suis entrain de manipuler l'ecriture dans un fichier externe,,je veut Parametrer le nembre des entier parés la virgule [ par sghchafaa ] Sélém Alikom((signifie "Bonjour" en tunisien);j'ai pas pu faire un arrandissement de 3 entier parés la virgule, en effe,j'ai fait un tot petit program Redirection de Console.WriteLine [ par scoubidou944 ] bonjour,comme mon ami Google  semble vexé aujourd'hui, je viens chercher refuge ici.Si dans un même projet en mode console, on veut hooker les appels Utilisation d'une variable locale non assignée 'TVA' [ par BadSnip ] Bonjour, Je suis étudiant en BTS de 1ere année et je commence simplement a apprendre le C#.J'ai recherché sur ce site et bien d'autre si quelqu'un ava probleme IF en C# [ par lucab03 ] j'ai un probleme avec les if, il ne sont paas pris en compte. si vous avez une solution. Merci int age=0;            int Nbe=0;            int Nbep20=


Nos sponsors

Sondage...

CalendriCode

Novembre 2008
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,328 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.