【问题标题】:PHP escapeshellarg on Windows for percent signWindows上的PHP escapeshellarg用于百分号
【发布时间】:2017-07-15 17:45:37
【问题描述】:

在 Windows 上,escapeshellarg 将所有百分号替换为空格:

$ php -r "echo escapeshellarg('%');";
" "

还有人mentioned this on php.net:

在 Windows 下,此函数将字符串放入双引号中,而不是 单,并用空格替换 %(百分号),这就是它的原因 无法通过此传递名称中包含百分比的文件名 功能。

我想仍然使用escapeshellarg 并且还允许使用百分号字符。在批处理中,您将使用另一个百分号转义一个百分号:

$ echo %%test%%
%test%

显然,您可以通过用独特的东西替换百分号,然后调用escapeshellarg,然后将百分号放回原处来做到这一点:

<?php
$arg = '%';
$uid = uniqid();
echo str_replace($uid, '%%', escapeshellarg(str_replace('%', $uid, $arg)));
// outputs: "%%"

那么,是否有任何已知的解决方法可以绕过此限制并仍然使用 escapeshellarg?

【问题讨论】:

  • 我做过的一个解决方法是通过标准输入管道输入一个参数。我对这种解决方法非常不满意。这对我来说是 PHP 的一个巨大限制

标签: php windows escaping


【解决方案1】:

这个链接很好地解释了PHPs sanitization API的缺点:https://gist.github.com/Zenexer/40d02da5e07f151adeaeeaa11af9ab36

由于各种原因,编写通用的 shell 转义函数是不可能的。

基本上看起来escapeshellarg 无论如何都不够安全。

我一直在使用标准输入来解决这个问题。这是一个糟糕的解决方法,但它为我完成了工作。

【讨论】:

    猜你喜欢
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多