使用PHP通过json_encode()进行脚本注入

时间:2014-05-26 09:30:04

标签: php json security

是否可以使用PHP json_encode()?

将属性注入JSON-String

或者以下示例易受攻击:

<?php
$search = $_GET['q'];
$api_call = array('search' => $search);
do_my_api_call(json_encode($api_call));
?>

这应输出类似

的内容
{"search":"my input string"}

这将是一个避免的结果:

{"search:"my input string","function":"do something weird to my REST-API"}

如果第二个可以使用被操纵的查询,我应该如何引用输入字符串?

1 个答案:

答案 0 :(得分:3)

无法以这种方式注入值。只有当你手工拼凑JSON时才有可能,例如:

$json = sprintf('{"search":"%s"}', $search);

但是,如果您正在使用json_encode,它会知道您的数据类型和数组结构,并将正确转义字符,以便生成给定输入的准确JSON表示。它不能被输入中的引号或其他特殊字符欺骗。