PHP:澄清清理 json $_POST
PHP: clarification on sanitizing json $_POST
用户提交表单后 post,我基本上是这样做的:
清理我的 json_decoded 输入。
json_decode 创建一个对象,我将其传递给自定义 class 方法:
$body = json_decode($_POST['body']);
$form_id = $_POST['form_id'];
$errors = $this->validate_form( $form_id, $body, $options );
在 $this->validate_form 中,我立即像上面 link 中的解决方案一样进行验证。
在 运行 时将解码的 json、form_id 分配给变量,然后将这些值传递给自定义方法是否存在安全漏洞,即使首先完成了与他们一起消毒后?
即是否有一些漏洞,比如花哨的 json 编码 'call_user_func' 等可以在这里实现,只需传递 values/storing 运行 时间值?
编辑:(也只是为了澄清,在点赞 call_user_func($form_id);
之后我并没有做任何明显糟糕的事情
)
不,没有安全问题。 PHP 分配变量时永远不会自行执行数据,您必须调用以需要执行数据的方式解释数据的函数。 json_decode()
不会做那样的事情,它只是将数据从一种格式静态转换为另一种格式。
一些危险操作的例子是eval()
(它执行任意代码),call_user_func()
(函数名来自用户输入),extract()
(它从数组),并将参数插入 SQL 查询字符串(使用参数化查询来防止 SQL 注入)。如果您在 HTML 输出中包含用户输入而不对其进行清理或编码,您也可以 运行 进入 XSS 问题。
用户提交表单后 post,我基本上是这样做的:
json_decode 创建一个对象,我将其传递给自定义 class 方法:
$body = json_decode($_POST['body']);
$form_id = $_POST['form_id'];
$errors = $this->validate_form( $form_id, $body, $options );
在 $this->validate_form 中,我立即像上面 link 中的解决方案一样进行验证。
在 运行 时将解码的 json、form_id 分配给变量,然后将这些值传递给自定义方法是否存在安全漏洞,即使首先完成了与他们一起消毒后?
即是否有一些漏洞,比如花哨的 json 编码 'call_user_func' 等可以在这里实现,只需传递 values/storing 运行 时间值?
编辑:(也只是为了澄清,在点赞 call_user_func($form_id);
之后我并没有做任何明显糟糕的事情
)
不,没有安全问题。 PHP 分配变量时永远不会自行执行数据,您必须调用以需要执行数据的方式解释数据的函数。 json_decode()
不会做那样的事情,它只是将数据从一种格式静态转换为另一种格式。
一些危险操作的例子是eval()
(它执行任意代码),call_user_func()
(函数名来自用户输入),extract()
(它从数组),并将参数插入 SQL 查询字符串(使用参数化查询来防止 SQL 注入)。如果您在 HTML 输出中包含用户输入而不对其进行清理或编码,您也可以 运行 进入 XSS 问题。