【问题标题】:Why is cgi POST data being garbled and truncated为什么 cgi POST 数据会出现乱码和截断
【发布时间】:2012-08-05 01:03:00
【问题描述】:

POST 的 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);

如果我发送大约 100k 的文本(大约 10k 短行),iLen 是正确的,但只有大约 10k 的数据并且它的最后一部分是乱码(大约 1000 行后它开始再次显示在大约 900 行,显示 100 行,然后 90k 什么都没有)

【问题讨论】:

    标签: javascript post xmlhttprequest cgi


    【解决方案1】:

    这是一次愚蠢的攻击。

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

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

    现在好多了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-29
      • 2010-09-07
      相关资源
      最近更新 更多