PHP HP Fortify отправляет непроверенные данные в веб-браузер, что может привести к тому, что браузер выполнит вредоносный код - PullRequest
0 голосов
/ 27 июня 2018

У меня есть скрипт 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 все еще говорит: строка № 11 отправляет непроверенные данные в веб-браузер, что может привести к тому, что браузер выполнит вредоносный код.

Кто-нибудь может помочь с этим?

1 Ответ

0 голосов
/ 27 июня 2018

Согласно некоторым другим ответам на этом сайте, функция json_encode в PHP обычно безопасна, и есть несколько опций, которые могут помочь сделать ее более безопасной, хотя и с дополнительным экранированием.

Использование следующего помогает избежать появления потенциально небезопасных символов, которые подхватывает Fortify:

echo json_encode($json_sanitized,JSON_HEX_QUOT|JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_APOS);

Для json_encode документов и констант json документов эти константы обеспечивают следующие (необязательные) преобразования:

  • JSON_HEX_QUOT - Все "преобразуются в \ u0022.
  • JSON_HEX_TAG - Все <и> преобразуются в \ u003C и \ u003E.
  • JSON_HEX_AMP - Все & преобразуются в \ u0026.
  • JSON_HEX_APOS - Все 'преобразуются в \ u0027.

Возможно, вы сможете пропустить экранирование одинарных и двойных кавычек, так как я думаю, что самая большая проблема в том, что <> можно печатать без экранирования.

Json: PHP в JavaScript безопасен или нет? Является ли json_encode достаточной защитой XSS?

...