Comment échapper à une chaîne pour une commande shell dans le nœud?

Dans nodejs, la seule façon d'exécuter des commandes externes est par sys.exec(cmd). J'aimerais appeler une commande externe et de lui donner des données via stdin. En nodejs, il ne semble pas encore être une façon de ouvrez une invite de commande puis appuyez données (uniquement pour exec et recevoir ses standard+les sorties d'erreur), donc il semble que la seule façon que j'ai à faire de ce droit est maintenant le biais d'une seule chaîne de commande telle que:

var dangerStr = "bad stuff here";
sys.exec("echo '" + dangerStr + "' | somecommand");

La plupart des réponses à des questions comme celles-ci ont porté sur des regex ne fonctionne pas pour moi en nodejs (qui utilise Google le moteur Javascript V8) ou de fonctionnalités natives à partir d'autres langages comme Python.

Je voudrais échapper à dangerStr de sorte qu'il est sûr de se composer un exec chaîne comme ci-dessus. Si cela peut aider, dangerStr contiendra les données JSON.

  • Pour Bourne-type de coquilles que vous pouvez utiliser l'algorithme suivant pour sortir en toute sécurité des chaînes: 1) remplacer toutes les occurrences de l'apostrophe (') avec les quatre séquence de caractères apostrophe, barre oblique inverse, l'apostrophe, l'apostrophe ('\") 2) ajouter une simple citation du début et de la fin de la chaîne modifiée. Attaque et de fuite des apostrophes ne sont pas codés parfaitement efficace, mais il fonctionne encore— "devient" \ "" quand il pourrait être juste \'.
  • Pour plus de précision: il m'a fallu un peu de temps pour comprendre @ChrisJohnsen de conseils, mais il vérifie. Si vous voulez don't do that sur la coque, ne echo 'don'\''t do that' pour produire don't do that.
InformationsquelleAutor Maciek | 2009-11-22