在PerlMojolicus中呈现JSON时防止转义字符



我有一个Mojolicus控制器,它调用

$controller->render_to_string(json => { %{$hashref} });
# or
$controller->render_to_string(json => $hashref);

$hashref包含写入JSON对象时要转义的字符
例如:

my $hashref = {
path => '/path/to/file'
}

输出为:

{
"path": "\/path\/to\/file"
}

有没有办法通知render_to_string()方法不要对这些值进行插值/转义?

我应该提到的是,实际的字符串是MD5散列。

在呈现JSON时,Mojolicus会转义/字符以防止XSS攻击。Mojo::JSON:的文档中提到了这一点

将始终转义字符/以防止XSS攻击。

"</script>" -> "</script>"

在实践中,这是由Mojo::JSON本身通过与";这是由Mojolicus在每次呈现JSON内容时自动完成的";。这意味着1(在执行->render( json => ... )时,没有干净的方法可以防止这种行为,2(修复方法只是使用另一个JSON模块进行编码,并在对render的调用中指定format => 'json'(这将导致响应的标头包含Content-Type: application/json,如Mojolicious::Guides::Rendering所述(:

use JSON qw( encode_json );
$controller->render(text => encode_json($hashref), format => 'json');

如果您只想用$controller->render_to_string渲染字符串(正如您在问题中所做的那样(,那么您可以省略format => 'json'(无论如何,formatrender_to_string忽略(:

use JSON qw( encode_json );
my $json = $controller->render_to_string(text => encode_json($hashref));

最新更新