Meloloskan Karakter dengan benar untuk eksekusi Shell dari ASP / VBScript

0

Saya menjalankan panggilan curl dari ASP dengan Obyek WScript.Shell.

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&"""")

Apa yang dilakukan perintah ini adalah, mengirim permintaan ikal dengan file yang ditambahkan. Konten file berasal dari stdin(tidak echo) untuk tidak perlu menulis file yang sebenarnya ke hard drive.

Masalah saya adalah, sepertinya beberapa panggilan tidak berfungsi sebagaimana mestinya, karena karakter-karakter dataStringyang melanggar perintah. The dataStringberisi JSON dengan input pengguna dari database.
Isi JSON mendapatkan dikodekan sudah, sehingga karakter bisa ditransformasikan ke \b, \t, \n, \f, \r, \", \/, \\atau dikodekan sebagai \uXXXXkarakter, meninggalkan dataStringtampak seperti ini:

{"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!"}

Jadi ... echo {"field":"..."} | ...akan menjadi String untuk dieksekusi.

Saya sudah mencoba sejauh ini untuk menggunakan tanda kutip ganda dan tanda kutip tunggal atau untuk melarikan diri dengan ^tetapi tidak berfungsi dengan baik. Setidaknya jika saya mencoba mensimulasikannya echo String | cat > testfile.txtdi jendela terminal saya.

Karakter apa yang saya butuhkan untuk melarikan diri dan bagaimana caranya?

Sunting:
Karena saya memilih solusi devplayer untuk panggilan dengan transfer file, Anda mungkin berpikir saya sudah selesai. Tapi sekarang saya mendapat jenis panggilan lain tanpa transfer file dan tanpa pipa, tetapi dengan masalah input pengguna yang sama yang harus diloloskan dengan benar.

Itu seperti:

curl ... -d "<properly escaped string>" --url ...
Mumpitz
sumber
Ini mungkin terdengar agak konyol, tetapi apakah ada ikal yang diinstal pada OS Windows Anda?
dmb
Ya, saya sudah melakukan permintaan yang berhasil dengan perintah semacam ini
Mumpitz
Mmm coba ketikkan spasi di sekitar &dan untuk hanya menggunakan tanda kutip ganda seperti ini””
dmb

Jawaban:

0

bagaimana jika Anda meneruskan konten string panjang Anda sebagai file ke perintah Anda? Yaitu menyimpan Anda datastring dalam file.txt dan memberi makan isi file untuk perintah sebagai berikut:

/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

?

penyembah
sumber
Maka saya hanya perlu memberikan filepath bukan tanda hubung -. Tidak perlu < file.txt. Tetapi ada cukup banyak "File" dan yang akan mengisi hard drive dengan sangat cepat. Saya terbatas dalam hal ruang, itu sebabnya saya mencoba tanpa file yang sebenarnya.
Mumpitz
Anda selalu dapat menggunakan kembali file yang sama, tidak perlu menumpuknya. memang benar itu bukan solusi untuk pertanyaan aktual, tetapi apakah itu solusi untuk masalah?
penyembuh
Ini adalah solusi yang saya pilih, tetapi hanya karena itu memecahkan masalah ukuran juga. Karena ini bukan jawaban untuk pertanyaan, saya tidak akan menandainya sebagai jawaban yang diterima. Kecuali jika masyarakat mengira begitu. ;)
Mumpitz