Bonne façon de passer la chaîne à partir de la page web, php et ensuite à l'Obj-C Outil de Ligne de Commande

Préface:

J'ai une page web avec un formulaire et un champ de texte.

1) Sur demande, le texte dans le champ est envoyé avec l'ajax vers un script php (avec la méthode GET).

2) Le script php récupère le texte et le passe en paramètre à un outil shell.

3) Le shell C outil d'analyse argc dans un tableau de unichars (en fait un NSString dans mon implémentation actuelle)

(4.. 5.. 6.. alors l'outil fait son travail, renvoie un résultat vers stdout que le script php sert en guise de réponse à la page web...)

Je suis à la recherche pour le corriger /canonique /"unicode" façon de faire à chaque étape de manière à ce que: le contenu est codé correctement et préservé, pas de problèmes de sécurité en sortir.

Ce que je fais maintenant:

1) (JavaScript) le texte est extrait à partir de la forme de cette façon

theText = $('#theField').attr('value');

et envoyé au serveur de cette façon

httpReq.open('GET','myScript.php?theText=' + encodeURIComponent(theText),true);

2) (PHP), je reçois le texte

$theText=(isset($_GET["theText"])?$_GET["theText"]:"");

J'appelle l'outil C

$cmd = "/usr/bin/thetool -theText ".escapeshellarg($theText);
echo shell_exec( $cmd );

3) (Objective-C) je suis sur MacOS X, alors j'en profite NSString et NSUserDefaults classes (mais un simple C solution serait bon pour moi aussi, suppose que je vais retrouver avec un tableau de unichars)

int main(int argc, const char * argv[])
{
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    NSString       *theText =      [userDefaults stringForKey: @"theText"];

Question(s)

Est-ce la bonne manière?

Est escapeshellarg seul en sécurité lors de l'invocation de shell_exec?

Vais-je perdre certains personnages le long du chemin si l'utilisateur tape quelque chose de particulier?

OriginalL'auteur Paolo | 2013-01-04