从 ASP/VBScript 正确转义字符以执行 Shell

从 ASP/VBScript 正确转义字符以执行 Shell

我正在使用 WScript.Shell 对象从 ASP 执行 curl 调用。

Set objCmd = objWShell.Exec("cmd.exe /c echo "&dataString&" | /path/to/curl --cacert '/path/to/cert/cacert.pem' -X POST"&options&" -A """&useragent&""""&referer&" -F "&fileParamName&"=@-;type="&fileMIME&";filename=^"""&filename&"^"" --url """&url&"""")

此命令的作用是发送附加文件的 curl 请求。文件内容来自stdinecho),无需将实际文件写入硬盘。

我的问题是,似乎有些调用无法正常工作,因为 中的字符会dataString破坏命令。dataString包含来自数据库的用户输入的 JSON。
JSON 内容已经编码,因此字符会转换为、 、 、 、 、\b\t编码\n\f字符\r,从而使看起来像这样:\"\/\\\uXXXXdataString

{"field":"User-String with \"encoded\" characters!\r\nSome other characters look like \u00FC or \u00E4.\r\nQuestion Marks?, Exclamation Marks!, 'SingleQuotes' and who knows what!"}

所以这... echo {"field":"..."} | ...将是要执行的字符串。

到目前为止,我尝试过使用双引号和单引号或使用转义符,^但效果并不理想。至少如果我尝试echo String | cat > testfile.txt在终端窗口中模拟它的话。

我需要转义哪些字符以及如何转义?

编辑:
由于我选择了 devplayer 解决方案来进行文件传输调用,您可能认为我已经完成了。但现在我得到了另一种没有文件传输、不需要管道的调用,但存在同样的用户输入问题,需要正确转义。

就像是:

curl ... -d "<properly escaped string>" --url ...

答案1

如果你将长字符串内容作为文件传递给命令,会怎么样?例如,存储你的数据串在一个文件.txt 并将文件内容提供给命令,如下所示:

/path/to/curl --cacert '/path/to/cert/cacert.pem' -X POST"&options&" -A """&useragent&""""&referer&" -F "&fileParamName&"=@-;type="&fileMIME&";filename=^"""&filename&"^"" --url """&url&""" < file.txt

相关内容