我有一個 Mojolicious 控制器,它呼叫
$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 哈希。
uj5u.com熱心網友回復:
在渲染 JSON 時,Mojolicious 會轉義/字符以防止XSS 攻擊。這在以下檔案中Mojo::JSON有所提及:
該角色
/將始終被轉義以防止 XSS 攻擊。"</script>" -> "<\/script>"
在實踐中,這是由Mojo::JSON它自己完成的,與“Mojolicious 每次呈現 JSON 內容時都會自動完成”相反。這意味著 1)當你這樣做時沒有干凈的方法來防止這種行為->render( json => ... ),并且 2)修復只是使用另一個 JSON 模塊進行編碼,并format => 'json'在呼叫中指定render(這將導致回應的標頭包含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));
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/464646.html
