PHP HP Fortify将未经验证的数据发送到Web浏览器,这可能导致浏览器执行恶意代码

时间:2018-06-27 16:25:44

标签: php xss fortify

我有一个如下的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浏览器,这可能导致浏览器执行恶意代码。

有人可以帮忙吗?

1 个答案:

答案 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_HEX_QUOT-所有“”都转换为\ u0022。
  • JSON_HEX_TAG-所有<和>均转换为\ u003C和\ u003E。
  • JSON_HEX_AMP-所有&s都转换为\ u0026。
  • JSON_HEX_APOS-全部'转换为\ u0027。

您可能可以跳过单引号和双引号的转义,因为我想最大的麻烦是<>可以不转义地打印。

Json: PHP to JavaScript safe or not? Is json_encode Sufficient XSS Protection?