前言:
我有一个带有表单和文本字段的网页。
1) 提交时,字段中的文本通过 ajax 发送到 php 脚本(使用 GET 方法)。
2) php 脚本获取文本并将其作为参数传递给 shell 工具。
3)shell C 工具将argc解析为一个 unichars 数组(在我当前的实现中实际上是一个 NSString)
(4.. 5.. 6.. 然后该工具完成了他的工作,将结果返回到标准输出,该 php 脚本作为对网页的响应返回...)
我正在寻找正确/规范/“ unicode ”的方式来执行每个步骤,以便:内容被正确编码和保存,不会出现安全问题。
我现在在做什么:
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 解决方案对我也有好处,假设我最终会得到一个 unichars 数组)
int main(int argc, const char * argv[])
{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSString *theText = [userDefaults stringForKey: @"theText"];
问题)
这是好方法吗?
调用 shell_exec 时单独使用escapeshellarg是否安全?
如果用户输入一些特殊的东西,我会不会丢失一些字符?