Aller au contenu

Photo

Recherche la meilleure solution pour faire des GET et POST


  • Please log in to reply
2 replies to this topic

#1 djnivek

djnivek

    iPuP apprenti

  • Members
  • 61 Messages :

Posté 14 juillet 2012 - 14:58

Bonjour,

Alors, voilà, je suis en train de développer une application qui possède un espace membre et je rencontre un petit dilemme.
De nombreux tutoriels existent en rapport avec le traitement d'une base de donnée depuis l'iPhone.

Au début mon dilemme était simple, j'hésitais entre connecté mon application à la base de données (ce qui voulait dire : mettre les identifiants de ma base données dans l'application) et faire un petit fichier php pour effectuer mes actions.
J'ai donc opté pour la deuxième (beaucoup plus sécurisée).

J'ai donc fait ce genre de code :
NSString *strUrl = [[NSString alloc] initWithFormat:@"http://monserver.fr/login.php?username=%@&password=%@", user, pass];
NSURL *url = [[NSURL alloc] initWithString:strUrl];
NSData *datas = [[NSData alloc] initWithContentsOfURL:url];
NSString *str = [[NSString alloc] initWithData:datas encoding:NSASCIIStringEncoding];
La variable "str" contenait alors tout ce que ma requête avait retourné.

Mon projet est maintenant beaucoup ambitieux et je le veux beaucoup plus sécurisé. J'ai fait de nombreuses recherches et suis tombé sur de nombreuses façons de faire ces GET et POST, mais je ne sais pas laquelle est la mieux.

Je vais donc expliquer ce que signifie pour moi "mieux" car c'est un peu vague, tout dépends de ce que l'on recherche.

Il me faut une façon de faire qui serait tout d'abord sécurisée, ensuite il faudrait que je puisse savoir le statut de l'action (si la requête a bien été faite, si elle a bien retourné quelque chose ...).

Car lors de mon dernier projet, avec la méthode ci-dessus, il arrivait que lorsque beaucoup de monde était connecté et faisaient des requêtes l'une d'entre elles ne s'effectuaient pas et alors cela faussait tout.
Je veux donc une autre méthode que celle utilisée ci-dessus.

J'ai déjà fait pas mal de recherche et j'ai mis la main sur les NSURLConnection je reçois grâce à cette technique des infos sur le statut de la requête (ReceiveData, FailWithError, FinishLoading...) cependant je voulais savoir est-ce que c'était la meilleure solution ?

Voilà mon code avec cette méthode :

NSString *strUrl = [[NSString alloc] initWithFormat:@"http://monserver.fr/login.php?username=%@&password=%@", user, pass];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:strUrl] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:8];
    NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self];
    
    if (!connection) {
        //Erreur dans la création de la NSURLConnection
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Erreur" message:@"Echec de Connexion" delegate:self cancelButtonTitle:@"Zut !" otherButtonTitles:nil];
        [alert show];
        [alert release];
    }
    else {[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];}
Grâce a cette méthode j'ai un timeoutInterval et des fonctions me permettant de savoir l'état de la requête.

Mais est-ce bien sécurisé d'envoyer des infos comme ça ? J'ai vu d'autres façons de faire en utilisant des setHTTPMethod:@"POST" ...

Bref, quelle est selon-vous la meilleure méthode ?

Merci d'avance.

#2 fl0

fl0

    iPuP aguerri

  • Members
  • 199 Messages :

Posté 15 juillet 2012 - 11:01

Salut,
Je te conseille de mettre dans la réponse de ton webService un key/value status. (exemple de réponse :
status : success
timestamp:3004253
autreInfoGlobal: 10000
response : {jsonkeys / jsonValues}

Apres, avec la méthode stringWithContentofURL tu devrait pouvoir t'en sortir facilement.

Apres, pour "sécurisé", tu peux utiliser des cookie de connection on des identifiant de session valable peux de temps, le problème étant d'envoyer le login/mot de passe en clair, mais ça on n'a pas trop le choix

Consultant, Développeur, Formateur

A la recherche d'une formation objective-C pour iOS?

http://www.mistra.fr...eloppement.html


#3 DiGk

DiGk

    [Modérateur] Développeur iPhone

  • Moderators
  • 1076 Messages :
  • LocationBordeaux

Posté 15 juillet 2012 - 21:44

Apres, pour "sécurisé", tu peux utiliser des cookie de connection on des identifiant de session valable peux de temps, le problème étant d'envoyer le login/mot de passe en clair, mais ça on n'a pas trop le choix

Ben si il peut envoyer le mot de passe en MD5 ou SHA1 a minima pour éviter qu'il soit en clair justement.

Framework Security.framework

#import <CommonCrypto/CommonDigest.h>

+ (NSString *)sha1:(NSString *)input
{
    const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding];
    NSData *data = [NSData dataWithBytes:cstr length:input.length];
    
    uint8_t digest[CC_SHA1_DIGEST_LENGTH];
    
    CC_SHA1(data.bytes, data.length, digest);
    
    NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
    
    for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)
        [output appendFormat:@"%02x", digest[i]];
    
    return output;
    
}

+ (NSString *)md5:(NSString *) input
{
    const char *cStr = [input UTF8String];
    unsigned char digest[16];
    CC_MD5( cStr, strlen(cStr), digest ); // This is the md5 call
    
    NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
    
    for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
        [output appendFormat:@"%02x", digest[i]];
    
    return output;
    
}





0 utilisateur(s) en train de lire ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)