新手问题 exec 和 system

metal · September 18, 2012 · Last by 15612877305 replied at November 15, 2016 · 5858 hits
exec("ls -la")

执行完毕就退出了 irb

system("ls -la")

留在 irb,并且返回 true。

exec 是不是相对来说在 web 应用使用安全点?

二者要怎么选择。当然还有 \`ls -la\`

居然还有%x() 也是可以用的。蛋疼呀。这么多方法

自己测试了一下。exec 直接给我退出应用了。哈哈。。。exec 不能用。

web 应用为啥要直接调用 shell? 我昨天也在研究这玩意。需要启一个 Debug Monitor, 跟 irb 有点像 不过会阻塞住,还不能用 &来后台……折腾一圈之后怒了直接单独开了一个 shell……

#2 楼 @southwolf 因为有个问题我解决不了。只好用终端去处理了。

上传图片的判断文件是不是图片格式的,非图片格式的上传到服务器会被删除。

图片要上传到服务器才能做出这个验证,在本地做图片类型验证做不了。

原来还有阻塞,实在蛋疼了~!

#4 楼 @metal 客户端判断文件扩展名不就得了?为什么要到服务端判断是不是图片?

记得 exec 是在当前进程中执行命令;system 是新建一个进程执行,执行完之后返回。

#5 楼 @willmouse 因为我把 zip 改成 jpg 也可以上传呀。

#7 楼 @metal 那是没错,但是既然是用户做了这件事,那结果明显就是图片没法正确被服务器处理,不是吗?最终用户将没办法看到任何图片。

服务器就把用户上传的东西当做图片处理,如果处理中出现了问题,也没必要删除,最终你还是要把这个用户所传的"图片"(实际上是别的东西)呈现给用户,那用户看到的应该就是个红叉,就是没东西。

#8 楼 @metal 始终把用户上传的东西当图片处理,imagemagick 可能因为格式问题处理不了非图片格式的数据,这样就可以不处理,或者做个 fallback 返回些默认的图片或者占位符之类的,我觉得没必要告诉用户他传的不是图片(从二进制数据角度来说),也可以不显示。

反正客户端验证一般都是考扩展名,服务端这边有没有必要刻意验证(如看二进制格式),我觉得还是看应用本身有没有必要吧。

@metal 也曾经被exec搞晕过,ruby 有不少于 6 种方法来执行 shell 命令,都有细微差别。 http://stackoverflow.com/a/2400/1219343 http://tech.natemurray.com/2007/03/ruby-shell-commands.html

@hooopo 我知道&……也搜到你这篇了,问题是文艺玩法抗不住这 2B 程序啊……后台运行就是这个屎样纸……CPU 顶到 100%……还不如直接另开个 Shell…… 2B

ruby 哪种方式能和 cmd 交互 比如 输入一段命令 可以获取到执行这段命名的结果,在根据结果进行输入在获取到结果

You need to Sign in before reply, if you don't have an account, please Sign up first.