5
我在這裏有一個小問題,我怎麼能告訴cURL專門將一個文件附加到請求?使用cURL上傳不帶@符號的文件?
如果我上傳與捲曲的文件時,則常用的方法是將其附加與具有@在它前面的值,例如POST數據陣列的一部分:
CURLOPT_POSTFIELDS=>array('my-file'=>'@my-file.txt')
這顯然的工作,但我有兩個問題是:如果
- 它實際上不是我上傳的文件?如果我的POST值實際上是'@ my-file.txt'並且它試圖上傳文件呢?它造成了我拼命試圖避免的漏洞。
- 如何從URL上傳文件?我是否需要下載它,將它存儲在臨時文件夾中,然後用@從該臨時文件夾中附加它?爲什麼我不能提供cURL只是我希望用作文件的內容?
cURL CURLOPT_INFILE不是一個選項,因爲它不會顯示爲$ _FILES數組的一部分。
看起來這樣的漏洞在cURL中依賴於POST字段值中的@符號。有沒有辦法解決它?爲什麼沒有CURLOPT_FILEFIELDS數組?命令行cURL對此有一個單獨的標誌(-F),但是由於某種原因,我沒有在PHP中看到它作爲一個選項。
任何幫助將不勝感激,謝謝!
重新發現漏洞,這似乎是不可修復的:https://bugs.php.net/bug.php?id=46439檢查輸入值時,您必須手動檢查是否存在「@」。 – 2012-08-11 09:39:39
也許['http_build_query'](http://php.net/http_build_query),在[這個答案](http://stackoverflow.com/a/648296/773625)? – mAu 2012-08-11 09:39:51
謝謝佩卡,我只希望有一個解決方案。但是mAu:這不起作用,因爲我的API也需要支持文件上傳。如果可以從POST字段中單獨提交文件,並且我需要在POST中提交一些數據(因爲GET的限制不在POST中),那麼一切都會好起來的。 – kingmaple 2012-08-11 10:10:02