当前位置: 首页 > 面试题库 >

在Golang中实施XSS保护

淳于昊然
2023-03-14
问题内容

我正在使用Golang来构建API
Rest。我有一个包含很多字段的结构(超过100个),因此我使用了来自客户端的值来分配给该结构gorilla/schema,效果很好。

现在,我要避免用户在任何字符串字段中插入Javascript代码,在结构中我定义了bool,strings,byte
[]和int值。因此,现在我想知道验证这一点的最佳方法是什么。

我正在考虑仅在字符串字段中对结构进行interate并进行如下操作:

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

可以吗 在那种情况下,我该如何遍历该结构,而仅是字符串字段?


问题答案:

您可以使用反射来遍历字段并转义字符串字段。例如:

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;"}

请注意,EscapeStringhtml包中有一个函数。无需自己实施。



 类似资料:
  • 问题内容: 我一直在寻找有关如何实现功能的示例,该功能使您可以在Go中的特定时间执行任务,但是我什么也找不到。 我自己实现了自己,并在答案中分享了它,以便其他人可以为自己的实现提供参考。 问题答案: 这是一个常规实现,可让您设置: 间隔期 小时打勾 分钟打勾 tick秒 更新:( 内存泄漏已修复)

  • 问题内容: 我正在尝试在C中实现管道-例如- 我写了以下代码- 使用两个参数可以很好地工作,例如- 但是,当我尝试两个以上的参数时,它将不起作用。 有人可以告诉我我的代码有什么问题吗,或者有其他方法可以做到这一点? 问题答案: 这实际上没有进行错误检查,但是为什么这么复杂?

  • 问题内容: 答案演示:(答案为5月29日上午3:10) GitHub Actual Question before answered:(asked May 22 at 19:53) The title might be not too great but what I want to do is something like this in JavaFX: Question: 我不需要为此写代码。

  • 在Perl中,使用Moo,可以围绕sub实现sub,它将围绕类中的其他方法。 如何在Raku中实现这种行为,最好使用角色?

  • 我有一个用例,在这个用例中,我必须只执行授权部分。JWT令牌是由另一个服务生成的。我的服务只会消耗那个令牌,它的自定义声明中会有数据。在我的Spring启动应用程序中,我只想在允许用户访问任何应用编程接口之前验证该令牌是否有效。在所有答案中,我可以看到一个身份验证对象是从当前的安全上下文中创建的。在Spring,有没有什么方法可以让我不需要在自定义过滤器中编写这么多不必要的代码,只需编写解析JWT

  • 我正在研究一个包含图像和文本的多模式分类器。我已经开发并成功地实现了两个模型,一个是用于图像的CNN模型,另一个是基于BERT的文本模型。这两个模型的最后一层都是密集的,有n个单元和softmax激活(其中n是类的数量)。Keras提供了不同的合并层,用于合并这些模型的输出向量(https://keras.io/api/layers/merging_layers/)然后就有可能创建一个新的网络,但