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
Vous devez vous connecter pour publier un commentaire.
D'attente à partir d'une compétente répondre, j'ai commencé à faire quelques empirique tests...
D'abord j'ai changé
à
pour voir ce que la ligne de commande invocation était en train d'être différentes, le texte saisi dans le formulaire. Il semble que escapeshellarg sur le PHP côté faire un bon travail.
Le texte transmis à l'Outil semble être toujours correctement scellé entre guillemets simples, avec "dangereux" le caractère d'échappement. Je n'ai trouvé aucun moyen de manipuler l'outil invocation.
Puis je l'ai testé pour le texte adopté pour voir si quelque chose était de se perdre quelque part.
J'ai créé l'outil C de cette façon, et regarda pour la sortie
Fait plusieurs essaie. Il semble que tout est ok. Le dernier test que j'ai entré un "SYMBOLE MUSICAL CLÉ de sol" dans le formulaire de
http://www.fileformat.info/info/unicode/char/1d11e/index.htm
Il s'est avéré correctement fin dans l'outil en tant que couple* de unichars
55348
56606
(* être un caractère dont le code dépasse 65535-il besoin d'être représenté par un couple de substitution unichars. C'est le plus de cas de bord, j'ai trouvé).
De toute façon comme je l'ai dit au début, ce sont juste empirique des tests. Je n'aime pas raisonnable de supposer que le code est bon juste parce passes une douzaine de test. Je serais très heureux de recevoir des commentaires ou des suggestions (ou de mises en garde!).
J'ai testé sur Mac OS X - Firefox sur le côté client Mac OS X: Mamp sur le côté serveur.
OriginalL'auteur Paolo