Javascript 为什么cgi POST数据被篡改和截断

Javascript 为什么cgi POST数据被篡改和截断,javascript,post,xmlhttprequest,cgi,Javascript,Post,Xmlhttprequest,Cgi,这篇文章的JavaScript是 file = document.getElementById("upfName").files[0]; xhrObj = new XMLHttpRequest(); xhrObj.open("POST", llm.serverExe + '?dataUpload', true); xhrObj.setRequestHeader("Content-type", file.type); xhrObj.setRequestHeader("X_FILE_NAME", f

这篇文章的JavaScript是

file = document.getElementById("upfName").files[0];
xhrObj = new XMLHttpRequest();
xhrObj.open("POST", llm.serverExe + '?dataUpload', true);
xhrObj.setRequestHeader("Content-type", file.type);
xhrObj.setRequestHeader("X_FILE_NAME", file.name);
xhrObj.send(file);
< C++中的CGI边为

int iLen = atoi(getenv("HTTP_CONTENT_LENGTH"));
char* pBuff = <<allocates iLen bytes>>
read(0, pBuff, iLen);
int-iLen=atoi(getenv(“HTTP_-CONTENT_-LENGTH”);
char*pBuff=
读取(0,pBuff,iLen);

如果我发送了大约100k的文本(大约10k短行),iLen是正确的,但是只有大约10k的数据,最后一部分是乱码(大约1000行之后,它又开始在大约900行显示,显示100行,然后是90k的空白)

这是一次愚蠢的攻击

1) 您需要在循环中读取以获取所有数据,读取时返回“部分”数据

2) 如果数据是文本,则需要在windows上将stdin的文件模式更改为二进制,以使计数正确。否则,读取将删除携带返回,使数据大小变小。然后,由于数据比预期的少,读取最终将不会返回(stdin不会返回EOF,它只是挂起)

现在好多了