php - MongoDB + PHP:过滤已解析的用户输入是否安全?
问题描述
这是安全的还是容易被用户输入利用?
$ids = explode(",", $_GET['ids']);
$results = $collection->find([
'arbitraryId' => ['$in' => $ids]
]);
解决方案
在这种特殊情况下,它本身不是易受注入的,但可能会引发错误:
GET /?ids[]=1
此输入将破坏您的第一行代码,因为 PHP 将此类参数视为数组并会尝试对其运行explode()
,这会导致
ErrorException: explode() expects parameter 2 to be string, array given
通常的做法是先验证请求并仅在验证成功后继续,否则返回422 unprocessable entity
状态。大多数框架都为您提供了方便的工具来轻松完成此任务。为了说明,在 Laravel 中它看起来像这样:
$this->validate($request, [
'ids' => 'string',
]);
// quits and returns 422 status automatically on validation failure
推荐阅读
- c# - 何时检查 InnerException
- web-services - Camel Restlet 异步向客户端发送响应
- javascript - 光滑的垂直滑块问题
- c++ - 如何减少应用程序的 CPU 使用率?
- sql-server - 如何使用 SSIS 从 ActiveMQ 队列中读取数据?
- ionic-framework - Uncaught (in promise):导航堆栈至少需要一个根页面
- sap - SAP HANA | 截断分区
- c++ - 是否将参数加载到空函数的缓存中?
- cobol - + COBOL 中第 7 列中的符号
- javascript - 我可以在反应中使用 fetch 发布文本数据吗