此主题已被请求 Laravel - how to Prefix all json responses to protect against json injection
没有任何回复,所以我再试一次。
我已经尝试了
Route::filter('protectionJson',function($route,$request ,$response)
{
if($request->ajax() && ($response instanceof \Illuminate\Http\JsonResponse)){
return ")]}',\n".json_encode($response->getData());
}
});
Route::get('user', array('as' => 'base.user.index', 'uses' => 'App\Controllers\UserController@index'))->before('hasAccess:users')->after('protectionJson');
和
App::after(function($request, $response)
{
if($request->ajax() && ($response instanceof \Illuminate\Http\JsonResponse)){
return ")]}',\n".json_encode($response->getData());
}
});
但它不起作用我的意思是我一直都是标准的json格式。
答案 0 :(得分:1)
如果要在响应中添加/附加数据,可以使用响应对象getContent()
方法访问响应数据。
Route::filter('json.protect',function($route,$request,$response = null)
{
if($response instanceof \Illuminate\Http\JsonResponse) {
$json = ")]}',\n" . $response->getContent();
return $response->setContent($json);
}
});
然后,您可以使用after
属性将其附加到路线。
Route::get('/test', array('after' =>'json.protect', function()
{
$test = array(
"foo" => "bar",
"bar" => "foo",
);
return Response::json($test);
}));
或者,如果您不想为每条路线附加过滤器,那么也可以使用App::after
钩子
App::after(function($request, $response)
{
if($response instanceof \Illuminate\Http\JsonResponse) {
$json = ")]}',\n" . $response->getContent();
return $response->setContent($json);
}
});