Как замаскировать пароль, сохраненный в файле json, используя скрипт - PullRequest
0 голосов
/ 25 июня 2018

Я использую приведенный ниже скрипт для маскировки конфиденциальных данных.который отлично работает для файла yml.

awk '
   BEGIN {
       IGNORECASE = 1
   }
   $1 ~ /^('${3}')$/ {
      gsub( /[^-]/, "X", $2 )
   }
  { print }
' "${1}" > "${2}"

Я передаю исходный_файл dest_file maskKeyword как команду, как показано ниже, из моего класса Java, но он не работает.

 ./script.sh /abc/aa.json  /maskedaa.json   ‘"password":’

Это мой файл JSONвыглядит так.

[
  {
    "username": "abc",
    "password": “cdgiN1n/nSQE="
  },
  {
    "username": "abc",
    "password": "QXiFTkgKft6PhfkfjLtCWQE="
  }
]

Ответы [ 2 ]

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

Я согласен, что в этом случае jq предпочтительнее, чем awk (дополнительные комментарии приведены ниже).Если вы знаете, что json довольно напечатан (только одна запись в строке), вы можете использовать регулярное выражение, чтобы разбить строку на три части.

awk -v field="${3}" '
  BEGIN {
    IGNORECASE = 1
    regex = sprintf("^([^\"]*\"%s\"[^:]*:[^\"]*\")([^\"]*)(\".*)$", field)
  }

  $0 ~ regex {
    before   = gensub(regex, "\\1", 1)
    password = gensub(regex, "\\2", 1)
    after    = gensub(regex, "\\3", 1)
    masked   = gensub(/./, "X", "g", password)
    printf("%s%s%s\n", before, masked, after)
    next
  } { print }' "${1}" > "${2}"

Сценарий awk, который я написал, соответствует только трем компонентам красивой печатной строки:

  1. [^\"]*\"%s\"[^:]*:[^\"]*\" соответствует строке ввода до точки с запятой.Имя поля должно быть в двойных кавычках.
  2. [^\"]*: соответствует значению записи
  3. \".*: соответствует конечной двойной кавычке поля и, возможно, запятым и другим полям.

Затем скрипт маскирует пароль, заменяя каждый символ на «X».Наконец, он печатает конечный результат и пропускает следующий блок.

Предостережения:

  • JSON должен быть достаточно напечатан или иметь хотя бы одно поле пароля на строку
  • Поле пароля должно быть первым полем строки
  • Этот скрипт не поддерживает экранированные двойные кавычки внутри полей
  • Этот скрипт работает только с gnu awk (или gawk)

Комментарий: я бы добавилс решением jq или, может быть, запечь jq в файл bash, если переносимость обязательна.

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

После того, как вы исправите свой JSON (неправильная фигурная кавычка в строке 4, неправильная запятая в строке 9), вы можете использовать , чтобы сделать:

jq 'map(.password = "X")' aa.json
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...