是否可以使用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"}
如果第二个可以使用被操纵的查询,我应该如何引用输入字符串?
答案 0 :(得分:3)
无法以这种方式注入值。只有当你手工拼凑JSON时才有可能,例如:
$json = sprintf('{"search":"%s"}', $search);
但是,如果您正在使用json_encode
,它会知道您的数据类型和数组结构,并将正确转义字符,以便生成给定输入的准确JSON表示。它不能被输入中的引号或其他特殊字符欺骗。