2017-05-26 17 views
0

私はGolangを使用してAPI Restを構築しています。私は多くのフィールド(100以上)を持つ構造体を持っているので、クライアントサイドから来る値をgorilla/schemaを使って構造体に割り当てます。それはかなりうまくいきます。GolangでXSS保護を実装する

ここで、Bool、String、byte []とint値を定義した構造体の文字列フィールドにJavascriptコードを挿入しないようにします。だから、今私はそれを検証するための最良の方法は何か不思議です。

私は文字列だけフィールドに構造体の上にinterateに考え、のようなものを作るのです。

Loop over the struct { 
    myProperty := JSEscapeString(myProperty) 
} 

は、それは大丈夫ですか?その場合、どのように構造体をループすることができますが、文字列フィールドだけをループできますか?

答えて

0

フィールドをループして文字列フィールドをエスケープするためにリフレクションを使用できます。たとえば :HTMLパッケージのEscapeString機能があることを

myStruct := struct { 
     IntField int 
     StringField string 
    } { 
     IntField: 42, 
     StringField: "<script>alert('foo');</script>", 
    } 

    value := reflect.ValueOf(&myStruct).Elem() 

    // loop over the struct 
    for i := 0; i < value.NumField(); i++ { 
     field := value.Field(i) 

     // check if the field is a string 
     if field.Type() != reflect.TypeOf("") { 
      continue 
     } 

     str := field.Interface().(string) 
     // set field to escaped version of the string 
     field.SetString(html.EscapeString(str)) 
    } 

    fmt.Printf("%#v", myStruct) 
    // prints: struct { IntField int; StringField string }{IntField:42, StringField:"&lt;script&gt;alert(&#39;foo&#39;);&lt;/script&gt;"} 

注意。あなた自身を実装する必要はありません。

+0

これは本当に良いです!それは私のために働いた –

関連する問題