序文:
フォームとテキストフィールドを含むWebページがあります。
1)送信時に、フィールドのテキストはajaxでphpスクリプトに送信されます(GETメソッドを使用)。
2)phpスクリプトはテキストを取得し、それをパラメーターとしてシェルツールに渡します。
3)シェルCツールは、 argcをunicharの配列に解析します(実際には、現在の実装ではNSString)。
(4 .. 5 .. 6 ..次に、ツールは彼の仕事を行い、phpスクリプトがWebページへの応答として機能するという結果をstdoutに返します...)
コンテンツが適切にエンコードおよび保存され、セキュリティの問題が発生しないように、各ステップを実行するための正しい/標準的な/「ユニコード」の方法を探しています。
私が今していること:
1)(JavaScript)テキストはこの方法でフォームから取得されます
theText = $('#theField').attr('value');
この方法でサーバーに送信されます
httpReq.open('GET','myScript.php?theText=' + encodeURIComponent(theText),true);
2)(PHP)テキストを取得します
$theText=(isset($_GET["theText"])?$_GET["theText"]:"");
私はCツールと呼んでいます
$cmd = "/usr/bin/thetool -theText ".escapeshellarg($theText);
echo shell_exec( $cmd );
3)(Objective-C)私はMacOS Xを使用しているので、NSStringクラスとNSUserDefaultsクラスを利用します(ただし、最終的にユニチャーの配列になると仮定すると、プレーンなCソリューションも適しています)
int main(int argc, const char * argv[])
{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSString *theText = [userDefaults stringForKey: @"theText"];
質問
これは良い方法ですか?
shell_execを呼び出すとき、 escapeshellargだけで安全ですか?
ユーザーが何か奇妙なものを入力すると、途中でいくつかの文字が失われますか?