我正在开发一个应用程序,并具有格式的URL www.example.com/some_url/some_parameter/some_keyword
.我在设计上知道这些URL有一个最大长度(并且仍然有效).我应该为每个请求验证URL长度,以防止缓冲区溢出/注入攻击吗?我相信这是显而易见的,但我不是安全专家,所以也许我错过了一些东西.
如果您不期望输入,请拒绝它.
您应该始终验证您的输入,并且当然丢弃超出预期范围的任何内容.如果你已经知道你的网址真的不会超过一定的长度,那么在它到达应用程序之前拒绝它似乎是明智的.
纵深防御是一个很好的原则.但虚假的安全措施是一个不好的原则.差异取决于很多细节.
如果您确信N上的任何URL都无效,那么您也可以拒绝它.但如果这是真的,并且如果您的输入验证的其余部分是正确的,那么它将在以后被拒绝.因此,所有这些检查确实可能减轻代码中其他一些错误所造成的损害.花费你的时间思考如何避免这些错误通常比考虑N可能是什么更好.
如果你确实检查了长度,那么最好不要依赖代码中其他地方的长度限制.这样做可以将不同的检查更紧密地结合在一起,如果您更改规范并需要接受更长的URL,则更难以在下一版本中更改限制.例如,如果长度限制成为在没有适当注意的情况下将URL放入堆栈的借口,那么您可能会设置一个人进行摔倒.