我知道如何解析golang中的发布数据
r.ParseForm()
pid := r.PostFormValue("pid")
code := r.PostFormValue("code")
lang := r.PostFormValue("lang")
author := r.PostFormValue("author")
但是发布数据是
pid=1&code=#include <stdio.h>\x0Aint main()\x0A{\x0A\x09printf(\x223\x5Cn\x22);\x0A\x09return 0;\x0A}&lang=c&author=11
(这是从nginx日志中获得的)因此,当我解析数据时,可能是错误的。
code
的解析数据为#include <stdio.h>
int main()
{
printf("3\n")
代替
#include <stdio.h>
int main()
{
printf("3\n");
return 0;
}
那我该如何解决这个问题呢?
最佳答案
您正在传递原始代码,这可能是不安全,您的问题是由于以下原因:
https://golang.org/src/net/url/url.go?s=21047:21092#L761
我建议您对日志代码进行base64编码,然后在处理程序中对其进行解码。
import "encoding/base64"
...
code, err := base64.RawURLEncoding.DecodeString(r.PostFormValue("code"))
if err != nil {
// handle error
}
然后您的请求应如下所示:
curl --data "pid=1&code=I2luY2x1ZGUgPHN0ZGlvLmg-XHgwQWludCBtYWluKClceDBBe1x4MEFceDA5cHJpbnRmKFx4MjIzXHg1Q25ceDIyKTtceDBBXHgwOXJldHVybiAwO1x4MEF9&lang=c&author=11" http://localhost:8080