Безопасная отладка для производства JVMs

Используя ответы Ника и Барбары, вот пример кода со статистикой производительности для 1000000 циклов на моей машине:

input = "shmB6BhLe0gdGU8OxYykZ21vuxLjBo5I1ZTJjxWfyRTTlqQlgz0yUtPu8iNCCcsx78EPsObiPkCpRT8nqRtvM3Bku1f9nStmigaw";
input.Replace('\u2013', '-'); // en dash
input.Replace('\u2014', '-'); // em dash
input.Replace('\u2015', '-'); // horizontal bar
input.Replace('\u2017', '_'); // double low line
input.Replace('\u2018', '\''); // left single quotation mark
input.Replace('\u2019', '\''); // right single quotation mark
input.Replace('\u201a', ','); // single low-9 quotation mark
input.Replace('\u201b', '\''); // single high-reversed-9 quotation mark
input.Replace('\u201c', '\"'); // left double quotation mark
input.Replace('\u201d', '\"'); // right double quotation mark
input.Replace('\u201e', '\"'); // double low-9 quotation mark
input.Replace("\u2026", "..."); // horizontal ellipsis
input.Replace('\u2032', '\''); // prime
input.Replace('\u2033', '\"'); // double prime

Время: 958,1011 миллисекунд

input = "shmB6BhLe0gdGU8OxYykZ21vuxLjBo5I1ZTJjxWfyRTTlqQlgz0yUtPu8iNCCcsx78EPsObiPkCpRT8nqRtvM3Bku1f9nStmigaw";
var inputArray = input.ToCharArray();
for (int i = 0; i < inputArray.Length; i++)
{
    switch (inputArray[i])
    {
        case '\u2013':
            inputArray[i] = '-';
            break;
        // en dash
        case '\u2014':
            inputArray[i] = '-';
            break;
        // em dash
        case '\u2015':
            inputArray[i] = '-';
            break;
        // horizontal bar
        case '\u2017':
            inputArray[i] = '_';
            break;
        // double low line
        case '\u2018':
            inputArray[i] = '\'';
            break;
        // left single quotation mark
        case '\u2019':
            inputArray[i] = '\'';
            break;
        // right single quotation mark
        case '\u201a':
            inputArray[i] = ',';
            break;
        // single low-9 quotation mark
        case '\u201b':
            inputArray[i] = '\'';
            break;
        // single high-reversed-9 quotation mark
        case '\u201c':
            inputArray[i] = '\"';
            break;
        // left double quotation mark
        case '\u201d':
            inputArray[i] = '\"';
            break;
        // right double quotation mark
        case '\u201e':
            inputArray[i] = '\"';
            break;
        // double low-9 quotation mark
        case '\u2026':
            inputArray[i] = '.';
            break;
        // horizontal ellipsis
        case '\u2032':
            inputArray[i] = '\'';
            break;
        // prime
        case '\u2033':
            inputArray[i] = '\"';
            break;
        // double prime
    }
}
input = new string(inputArray);

Время: 362,0858 миллисекунд

18
задан ShabbyDoo 1 June 2009 в 22:12
поделиться

4 ответа

Если вы используете SSH, вы можете разрешить туннелирование и туннелирование порта на ваш локальный хост. Никакой разработки не требуется, все делается с использованием sshd, ssh и / или putty.

Отладочный сокет на вашем Java-сервере можно настроить на локальном интерфейсе 127.0.0.1.

8
ответ дан 30 November 2019 в 09:32
поделиться

Вы абсолютно правы: API отладки Java по своей сути небезопасен. Однако вы можете ограничить его сокетами домена UNIX и написать прокси с SSL / SSH, чтобы вы могли аутентифицировать и зашифровывать внешние соединения, которые затем проксируются в сокет домена UNIX. Это, по крайней мере, уменьшает вашу доступность к тому, кто может передать процесс на сервер, или кому-то, кто может взломать ваш SSL.

2
ответ дан 30 November 2019 в 09:32
поделиться

Экспорт информации / служб в JMX, а затем использование RMI + SSL для удаленного доступа. JMX предназначен для вашей ситуации (M означает Management).

0
ответ дан 30 November 2019 в 09:32
поделиться

Хороший вопрос.

Я не знаю ни одной встроенной возможности шифровать соединения с портом отладки.

Может быть гораздо лучшее / более простое решение, но я будет делать следующее:

  1. Поместить производственную машину за брандмауэр, который блокирует доступ к порту (портам) отладки.
  2. Запустить прокси-процесс на самом хосте, который подключается к порту, и шифрует ввод и вывод от сокет.
  3. Запустите прокси-клиент на отладочной рабочей станции, который также шифрует / дешифрует ввод. Подключите это к прокси-серверу. Связь между ними будет зашифрована.
  4. Подключите отладчик к прокси-клиенту.
0
ответ дан 30 November 2019 в 09:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: