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

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

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

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...

标签:escaping,exec,php,exiv2

来源: https://codeday.me/bug/20191024/1920472.html

php 英文引号转义,如何用引号转义php exec()命令相关推荐

  1. quot转双引号 php,js把 quot 转义双引号

    " \\\\ 退格 走纸换行 回车 换行 横向跳格 单引号 双引号 反斜杠 实体编号       < > & " © × &divide...... 共 ...

  2. 双引号内的单引号转义

    多引号内的单引号转义 '-->单引号转义 "-->双引号 thtml+="<input type='text' autocomplete='off' value= ...

  3. 过滤英文双引号替换为中文引号

    输入框输入的文本通常会出现英文引号,从而在使用的时候会出现异常,为避免这些异常,我们可以将英文引号替换为中文引号,如下: var str = "你好\"bug,我是从\" ...

  4. WPS里如何去掉英文引号自动转换为中文引号?

    我使用的是wps2006,记录代码的时候,经常被wps自作聪明地把英文单引号,双引号自动转换为中文的单引号,双引号. 去掉这个功能的方法:左上角wps菜单-->选项-->编辑-->自 ...

  5. WPS文字 | Word-查找与替换功能剖析之“如何把英文引号替换为中文引号”

    前言 先说明一下, WPS和OFFICE中的word文档,存在一定不同:对于同样的查找与替换设置,得到的结果不相同. 举个例子,假如原文为: 在WPS下:得出来的结果有两种,有时候会把英文引号里的内容 ...

  6. python中字符串单引号、双引号、三引号_Python:字符串单引号(‘)、双引号(“)、三单引号(”’)和三双引号(“””)的区别...

    实际上在Python中'...'和"..."是完全一样的,但不能出现'..."和"...'这种情况. 而将其混合使用会有很多意想不到的效果: 具体规则如下: 若 ...

  7. python创建包含双引号的字符串代码_python 字符串组成MySql 命令时,字符串含有单引号或者双引号导致出错解决办法...

    引用自:https://blog.csdn.net/zhaoya_huangqing/article/details/48036839 一.在组成SQL语句并发送命令时完全按照Python中的样式去传 ...

  8. js中单引号和双引号的区别(html中属性规范是用双引号,js中字符串规定是用单引号)(js中单引号区别和php很像:单引号快,双引号可转义字符,双引号可解析变量)...

    js中单引号和双引号的区别(html中属性规范是用双引号,js中字符串规定是用单引号)(js中单引号区别和php很像:单引号快,双引号可转义字符,双引号可解析变量) 一.总结 1.html中属性规范是 ...

  9. PYTHON 双引号 单引号 多引号区别

    先说1双引号与3个双引号的区别,双引号所表示的字符串通常要写成一行 如: s1 = "hello,world" 如果要写成多行,那么就要使用/ ("连行符")吧 ...

最新文章

  1. 腾讯林衍凯:图神经网络,考虑「拓扑信息」会怎样?
  2. TCP客户机-服务器
  3. 简述angular中constant和$filter的用法
  4. java 异步调用webapi_Async Await异步调用WebApi
  5. Maven使用创建项目(一)
  6. eslint的安装与使用
  7. 10个JavaScript代码片段,帮助你成为更好的开发者
  8. 使用组策略禁止域用户运行特定软件名称的程序
  9. 慎用 apt-get autoremove !
  10. Unity3D基础12:碰撞体
  11. 【转】 Android xml中 @和?区别,style和attr小结
  12. Python爬虫入门教程 29-100 手机APP数据抓取 pyspider
  13. 如何利用 Flutter 实现炫酷的 3D 卡片和帅气的 360° 展示效果
  14. matlab语法归纳
  15. 玩真的了!深度解读拒不履行信息网络安全管理义务将入罪
  16. doxygen的特定命令
  17. 测向交叉定位matlab,测向交叉定位
  18. leetcode剑指offe刷题-第一题-用两个栈实现队列
  19. 水果之王之猕猴桃-系列三(猕猴桃的功能和禁忌)
  20. chmod +x 与chmod 777 的超详细解说

热门文章

  1. 大数据workshop:《在线用户行为分析:基于流式计算的数据处理及应用》之《实时数据分析:海量日志数据多维透视》篇...
  2. phalcon: Profiling分析 profilter / Plugin结合,dispatcher调度控制器 监听sql执行日志
  3. C++ static、const对象声明与定义 问题来源?
  4. CSS(一)sytle
  5. Rancher Kubernetes Engine(RKE)正式发布:闪电般的Kubernetes安装部署体验
  6. 实现WinForm窗体的美化(借助第三方控件)
  7. 【MySql】MySql存储,游标,循环的简单使用
  8. linux下svn的常用代码【转】
  9. 5.7 Components — Sending Actions From Components to Your Application
  10. 数据链路层(2层)数据帧结构