我有一个如下的PHP脚本:
10. $json_sanitized = ds($json);
11. echo json_encode ( $json_sanitized );
ds()
函数几乎没有规则来清理$json
数据。
function ds($text, $double = true, $charset = null) {
if (is_array($text)) {
// Some code
} elseif (is_object($text)) {
// Some code
} elseif (is_bool($text)) {
// Some code
}
$defaultCharset = 'UTF-8';
if (is_string($double)) {
$charset = $double;
}
return htmlspecialchars($text, ENT_QUOTES, ($charset) ? $charset : $defaultCharset, $double);
}
但是HP Fortify Scanner仍然说第11行,将未经验证的数据发送到Web浏览器,这可能导致浏览器执行恶意代码。
有人可以帮忙吗?
答案 0 :(得分:0)
根据该站点上的其他一些答案,PHP中的json_encode
函数通常是安全的,并且有一些选项可以通过附加转义来帮助使其更安全。
使用以下内容有助于逃脱Fortify拾取的更多潜在不安全字符:
echo json_encode($json_sanitized,JSON_HEX_QUOT|JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_APOS);
对于json_encode
docs和json常量docs,这些常量提供以下(可选)转换:
您可能可以跳过单引号和双引号的转义,因为我想最大的麻烦是<>可以不转义地打印。
Json: PHP to JavaScript safe or not? Is json_encode Sufficient XSS Protection?