我们的系统正在接受包括特殊字符的请求,参见parameter2。
Request [
{
"reqHeader": {
"parameter1": "abc",
"parameter2": "123456 script>alert(1)</script",
"parameter3": "2022-11-8"
}
}
]我们不会在任何数据库中保存数据,也不会在任何API中返回这些数据。但是我们被要求检查特殊字符的有效性。我担心的是,如果我们要验证每个参数中的特殊字符,就会对API性能造成影响。
我真的需要在我的场景中验证这样的字符吗?
发布于 2022-11-08 16:20:40
一般情况下:输入的数据应该按照数据接收器的期望进行编码或转义。
如果数据接收器是一个模板,它将包含raw中的数据,但将显示为HTML --那么通常的期望是,数据中任何类似HTML的东西都应该正确地转义,除非它实际上是HTML。
如果数据接收器是SQL语句,那么应该正确地对其进行转义,以避免SQL注入(或者更好:使用参数绑定)。
如果数据接收器只是日志记录,可以处理任意数据,并且不会以任何方式解释数据,那么就不需要进行转义或编码。但是,不要盲目地假设期望是什么,因为这似乎是显而易见的。在臭名昭著的log4j漏洞中,大多数用户都认为一个普通的日志库只会记录事物,而不会有危险的解释。只有这个假设是错误的,可能导致远程代码执行。
发布于 2022-11-08 17:46:24
用户提供的数据将以任何方式处理,默认情况下应对其进行仔细检查。
今天,您可以将数据存储在某个地方并完成它。但是,明天,客户/业务将提出一个新的要求,即他们希望处理数据并生成漂亮的HTML报告。然后,您将陷入麻烦,因为您不仅必须满足特殊的字符无论如何,你还需要找到一种方法,使所有以前存储的数据安全使用。
如果您认为验证会对API的性能产生重大影响,那么您应该度量影响并做出明智的决定,而不是将您的操作建立在评估的基础上。
到头来,验证可能会对API的性能造成微不足道的影响,但未经验证的数据可能会阻碍您的未来计划。
https://security.stackexchange.com/questions/266190
复制相似问题