2016-10-15 9 views
-1

に私はgolang解析のポストデータが誤っ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ですデータ、それは間違っている可能性があります。 codeの解析されたデータは、

#include <stdio.h> 
int main() 
{ 
    printf("3\n") 

代わりの

#include <stdio.h> 
int main() 
{ 
    printf("3\n"); 
    return 0; 
} 

それでは、どのように私はこの問題を解決することができますか?

答えて

0

あなたは危険な可能性があり、生のコードを、渡している、あなたの問題は、このためです:

https://golang.org/src/net/url/url.go?s=21047:21092#L761

enter image description here

私はあなたのログコードをbase64encodeことを示唆しているとハンドラでデコードします。

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 
+0

完全な問題は、現在、外出先のクエリ処理コードでその特定の行ではありませんが、問題は、限られた文字セットが存在することですURLとそのセット内の予約された文字の数が多い – JimB

+0

はい、まさにそうです。答えの最初の行に書かれているとおりです。その安全ではないパラメータを渡す理由とその理由がわかりました。たぶんそれは明らかではない、私は危険な単語を強調表示します。 @ JimBのコメントありがとう – davidcv5