3 回答

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個(gè)贊
直接回答:你做不到。只要PHP看到multipart / form-data Content-Type,它就會(huì)堅(jiān)持自己解析它。原始數(shù)據(jù)將無(wú)法使用??杀氖?。但你可以破解它。
我遇到了類似的問(wèn)題,合作伙伴發(fā)送格式錯(cuò)誤的數(shù)據(jù)作為multipart / form-data,PHP無(wú)法解析它并且沒(méi)有發(fā)布它所以我可以自己解析它。
解決方案?我把它添加到我的apache conf:
<Location "/backend/XXX.php"> SetEnvIf Content-Type ^(multipart/form-data)(.*) NEW_CONTENT_TYPE=multipart/form-data-alternate$2 OLD_CONTENT_TYPE=$1$2 RequestHeader set Content-Type %{NEW_CONTENT_TYPE}e env=NEW_CONTENT_TYPE</Location>
這會(huì)將傳入請(qǐng)求的Content-Type從multipart / form-data更改為XXX.php到multipart / form-data-alternate,這足以阻止PHP嘗試解析它
在此之后,您最終可以從php://輸入讀取整個(gè)原始數(shù)據(jù)并自行解析。
這很丑陋,但我沒(méi)有找到更好的或事實(shí)上任何其他解決方案 - 沒(méi)有要求合作伙伴來(lái)解決他們的問(wèn)題。
NB!當(dāng)你按照我在這里描述的那樣做時(shí),$ _FILES將為空。

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超5個(gè)贊

TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個(gè)贊
我沒(méi)有完全實(shí)現(xiàn)它,但它看起來(lái)應(yīng)該工作。在Apache conf
:
SetEnvIf Content-Type ^(multipart/form-data)(.*) MULTIPART_CTYPE=$1$2RequestHeader set Content-Type application/x-httpd-php env=MULTIPART_CTYPERequestHeader set X-Real-Content-Type %{MULTIPART_CTYPE}e env=MULTIPART_CTYPE
設(shè)置Content-Type
to application/x-httpd-php
似乎解決了PHP解析主體的原始問(wèn)題,而Norbert Farkas報(bào)告的問(wèn)題是:“Apache發(fā)回PHP源代碼”。然后可以使用正文php://input
,并在X-Real-Content-Type
標(biāo)題中輸入實(shí)際內(nèi)容類型。(那個(gè)標(biāo)題對(duì)你來(lái)說(shuō)可能不是必需的 - MULTIPART_CTYPE
變量似乎沒(méi)有顯示在我的中$_ENV
,但新的標(biāo)題確實(shí)出現(xiàn)了。)所有其他請(qǐng)求應(yīng)該像往常一樣處理。
- 3 回答
- 0 關(guān)注
- 381 瀏覽
添加回答
舉報(bào)