PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何用引号转义php exec()命令大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我在Linux上使用exiv2命令行工具来编辑图像元数据,如下所示:

exiv2 -M"set Iptc.Application2.Caption String This is my caption....." modify IMG.jpg

我想使用用户提供的@L_696_4@从@L_616_5@执行此操作.如果用户不输入任何特殊字符,这将起作用:

exec('/usr/local/bin/exiv2 -M"set Iptc.Application2.Caption String '.$caption.'" modify IMG.jpg');

我需要允许用户使用特殊字符,例如单引号和双引号.我想使用escapesHellcmd()来防止恶意数据.我如何正确地转义命令和参数,以便其起作用?我尝试了很多选择,但我做对了.

解决方法:

是的,这是一个难题,因为该命令使用的是非标准的sHell参数(例如它自己的小元语言). ImageMagick具有相同的问题.

如果仅在双引号引起来的字符串中使用escapesHellarg(),它将变为无用的. escapesHellcmd()会转义所有特殊字符,并且可以安全地用于双引号字符串中.因此,您需要对单引号进行硬编码,以使其正常工作.

exec('/usr/local/bin/exiv2 -M"set Iptc.Application2.Caption String \'' . escapesHellcmd($caption) . '\'" modify IMG.jpg');

escapesHellarg()在单引号字符串中不起作用的原因是:

# for this input:
The smith's "; rm -rf *; echo "went to town

# after escapesHellarg()
'The smith\'s "; rm -rf *; echo "went to town'

# Works fine if left as a top-level argument
/usr/bin/command 'The smith\'s "; rm -rf *; echo "went to town'

# BUT if put in a double-quoted String:
/usr/bin/command "subcommand1 'The smith\'s "; rm -rf *; echo "went to town'"

# it is broken into 3 sHell commands:
/usr/bin/command "something and 'The smith\'s ";
rm -rf *;
echo "went to town'"

# bad day...

大佬总结

以上是大佬教程为你收集整理的如何用引号转义php exec()命令全部内容,希望文章能够帮你解决如何用引号转义php exec()命令所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: