Да, вам нужно санировать параметр обратного вызова.
JSONP - это, по сути, атака XSS. Когда (временно) вставка тега script с URL-адресом к другому имени хоста и разрешение ему вызывать глобальную функцию или метод на вашей странице, важно, по крайней мере, принять некоторые меры предосторожности, чтобы ограничить «обратный вызов» не более чем обратным вызовом имя.
Имя обратного вызова, синтаксически, должно быть таким же простым, как и идентификатор. Вы можете учесть свойства объекта. Я бы не рекомендовал разрешать использование скобок, поскольку это может привести к вызовам функций и т. Д.
Ниже приведен пример базового API, который поддерживает JSON и JSONP. Он написан на PHP (упрощенно из MediaWiki API), но подобные структуры могут быть созданы на других языках программирования.
<?php
// Simulate the response data
$responseData = [
'foo' => 'bar',
'count' => ['one', 'two', 'three'],
'total' => 3,
];
// Prepare to send the response
$prefix = '';
$suffix = '';
$ctype = 'application/json';
if (isset($_GET['callback'])) {
$ctype = 'text/javascript';
// Sanitize callback
$callback = preg_replace("/[^][.\\'\\\"_A-Za-z0-9]/", '', $_GET['callback']);
$prefix = $callback . '(';
$suffix = ')';
}
// Send the response
header("Content-Type: $ctype; charset=UTF-8", true);
print $prefix . json_encode($responseData) . $suffix;
exit;