将字符串从网页传递到php,然后传递到Obj-C命令行工具的正确方法
Correct way to pass string from web page, to php and then to Obj-C Command Line Tool
前言:
我有一个网页,里面有一个表单和一个文本字段。
1( 提交时,字段中的文本将使用ajax发送到php脚本(使用GET方法(。
2( php脚本获取文本并将其作为参数传递给shell工具。
3( shell C工具将argc解析为unichars数组(实际上是我当前实现中的NSString(
(4..5..6..然后工具完成他的工作,向stdout返回一个结果,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(我在MacOSX上,所以我利用了NSString和NSUserDefaults类(但普通的C解决方案对我来说也很好,假设我最终会得到一组unichars(
int main(int argc, const char * argv[])
{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSString *theText = [userDefaults stringForKey: @"theText"];
问题
这是个好办法吗?
调用shell_exec时,单独使用escapesellarg是否安全?
如果用户键入一些特殊的内容,我会在这一过程中丢失一些字符吗?
等待有能力的回复,我已经开始进行一些经验测试。。。
首先我换了
echo shell_exec( $cmd );
至
echo $cmd;
看看在表单中输入的各种文本会给命令行调用带来什么结果。看来PHP方面的escapeshellarg做得很好。
传递给工具的文本似乎总是正确地密封在单引号之间,"危险"字符转义得很好。我找不到篡改工具调用的方法。
然后我测试了通过的文本,看看是否有什么东西丢失了。
我以这种方式设置了C工具,并寻找输出
int main(int argc, const char * argv[])
{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSString *theText = [userDefaults stringForKey: @"theText"];
int i;
unichar c;
for(i=0;i<[theText length];i++)
{
c = [searchString characterAtIndex:(NSUInteger) i];
printf("%d'n",c);
}
return 0;
}
做了各种尝试。似乎一切都好。作为最后一次测试,我以的形式输入了"音乐符号G CLEF">
http://www.fileformat.info/info/unicode/char/1d11e/index.htm
结果正确地作为unichars 的一对*结束到工具中
5534856606
(*是一个非常特殊的字符,其代码超过65535,需要用几个代理unichars表示。这是我发现的最边缘的情况(。
不管怎样,正如我在开头所说的,这些只是经验测试。我不喜欢仅仅因为通过了十几次测试就认为合理的代码是好的。我很乐意收到评论或建议(或警告!(。
我在客户端测试了Mac OS X-Firefox,在服务器端测试了Mac OSX-Mamp。
- 通过命令行/批处理文件打开页面时,将javascript代码注入Google Chrome
- 命令行中的Uglify js;不要弄乱变量名
- 如何在没有单词的情况下从命令行运行Node.js程序'节点'
- 类似HTML命令行的文本框
- 节点JS express和控制台输出到命令行与浏览器
- 如何将.json文件作为参数导入.js文件并使用命令行启动它
- 最小化CSS/JS文件,并使用命令行创建一个文件
- 自动关闭或覆盖通过命令行打开的浏览器选项卡
- 如何在节点模块中从命令行运行函数
- 如何在命令行中运行/调试javascript
- node.js命令行工具
- Hapi.js文件上传我如何获取文件,这样我就可以在上面使用imageMagick命令行工具
- 使用Chrome中的JavaScript节点命令行工具
- 使用Meteor JS编写命令行工具
- 节点:ShellJS无法使用命令行工具
- 如何使用任何命令行工具或脚本将Word文档内容复制到Google Docs
- 如何将文件名组合在一起,用作命令行工具的参数
- Node: Windows中的命令行工具
- 将字符串从网页传递到php,然后传递到Obj-C命令行工具的正确方法
- 是否有一种方法可以使用命令行工具来查看网页的JavaScript解释源