我有一个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'
(无论如何,format
被render_to_string
忽略(:
use JSON qw( encode_json );
my $json = $controller->render_to_string(text => encode_json($hashref));