Rails - 如何拒绝格式错误的参数 - ActionDispatch::ParamsParser::ParseError
Rails - How to refuse bad formatted params - ActionDispatch::ParamsParser::ParseError
为了提高我的应用程序的安全性,我希望能够在我的应用程序控制器中检查接收到的参数。
ActionDispatch::ParamsParser::ParseError
示例:
"unexpected token at" ...
params
{
string: "string good formated",
interger1: 12,
intergerBad:34/../WEB-INF/web.xml340
}
当我收到它时,我收到错误格式错误 json,但我想在我的应用程序控制器中处理这个错误。
有什么想法吗?
你想要实现的是棘手的。参数就是一个字符串。它可能包含几种不同类型的数据:原始值,例如字符串或整数,甚至是复杂数据。
但是,它们的实际含义是一种业务逻辑,取决于您的应用程序和您赋予它们的含义。考虑到这种解释,即使 "Bad formatted" 参数也在您的案例业务定义中。
我告诉你的原因是因为你假设你可以在 ApplicationController 中检查这些参数,但是你可能检查它们的地方是使用参数的特定控制器。
事实上,同一个:id
参数在User控制器中可能代表一个整数,在Whatever控制器中代表一个字符串。
ApplicationController 不是检查它的最佳位置的另一个原因是因为您处于某种中间位置。如果你想压缩性能甚至不加载整个 Rails 堆栈,那么使用中间件。它快速、廉价且不昂贵,但作为 ApplicationController,它需要您提前知道每个单独的参数中将存储什么样的数据。并且可能存在不明确的参数。
相反,您可以在您希望使用该值的特定控制器中检查它们(通常这样做)。
在我看来,您正在寻找一个解决所有问题的单一解决方案,而不幸的是,应用程序开发可能需要一些额外的定制工作。
如果你确实有一些超级敏感的参数,你可以在请求进入时立即明确地验证,然后使用机架中间件。
为了提高我的应用程序的安全性,我希望能够在我的应用程序控制器中检查接收到的参数。
ActionDispatch::ParamsParser::ParseError
示例:
"unexpected token at" ...
params
{
string: "string good formated",
interger1: 12,
intergerBad:34/../WEB-INF/web.xml340
}
当我收到它时,我收到错误格式错误 json,但我想在我的应用程序控制器中处理这个错误。
有什么想法吗?
你想要实现的是棘手的。参数就是一个字符串。它可能包含几种不同类型的数据:原始值,例如字符串或整数,甚至是复杂数据。
但是,它们的实际含义是一种业务逻辑,取决于您的应用程序和您赋予它们的含义。考虑到这种解释,即使 "Bad formatted" 参数也在您的案例业务定义中。
我告诉你的原因是因为你假设你可以在 ApplicationController 中检查这些参数,但是你可能检查它们的地方是使用参数的特定控制器。
事实上,同一个:id
参数在User控制器中可能代表一个整数,在Whatever控制器中代表一个字符串。
ApplicationController 不是检查它的最佳位置的另一个原因是因为您处于某种中间位置。如果你想压缩性能甚至不加载整个 Rails 堆栈,那么使用中间件。它快速、廉价且不昂贵,但作为 ApplicationController,它需要您提前知道每个单独的参数中将存储什么样的数据。并且可能存在不明确的参数。
相反,您可以在您希望使用该值的特定控制器中检查它们(通常这样做)。
在我看来,您正在寻找一个解决所有问题的单一解决方案,而不幸的是,应用程序开发可能需要一些额外的定制工作。
如果你确实有一些超级敏感的参数,你可以在请求进入时立即明确地验证,然后使用机架中间件。