begin process at 2010 02 10 03:22:31
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Système

 > 

Autre

 > 

Newbie en C#, léger problème de sécurité avec VS2008.Net


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Newbie en C#, léger problème de sécurité avec VS2008.Net

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ée 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 Identification d'un client sur une appli client serveur en C# [ par dadew37 ] Bonjour tout le monde !Je suis débutant en C#, et pourtant l'entreprise ou je suis me demande de développer une appli en C# qui gère du client serveur 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 SerialPort et SerialDataReceivedEventHandler [ par sebastienth ] Bonjour à toutes et à tous, Électronicien de formation et débutant en C#, j'aurai aimé réaliser comme première application une communication de type envoyer un e-mail [ par morisaab ] Bonjour:J'ai écrit le programme suivant afin d'envoyer un e-mail:using System;using System.Windows.Forms;using System.Net.Mail;   public class sendmai


Nos sponsors


Sondage...

Comparez les prix


HTC Magic

Entre 429€ et 429€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,359 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales