Измените идентификатор сеанса Tomcat, чтобы включить верхний и нижний регистр символов - PullRequest
1 голос
/ 10 октября 2019

У меня есть требование, чтобы убедиться, что формат идентификатора сеанса, сгенерированный Tomcat, должен включать как верхний, нижний регистр символов и 0-9. Я проверяю исходный код Tomcat. \ org \ apache \ catalina \ util \ StandardSessionIdGenerator.java

В методе public String generateSessionId (String route)

Есть несколько строк для преобразования байта в строку шестнадцатеричной цифры следующим образом:

byte b1 = (byte) ((random[j] & 0xf0) >> 4);
byte b2 = (byte) (random[j] & 0x0f);
if (b1 < 10)
    buffer.append((char) ('0' + b1));
else
    buffer.append((char) ('A' + (b1 - 10)));
if (b2 < 10)
    buffer.append((char) ('0' + b2));
else
    buffer.append((char) ('A' + (b2 - 10)));

Похоже, что когда я изменяю заглавную букву 'A' на 'a', я могу достичь своей цели (цель состоит в том, что сгенерированный идентификатор сессии будет содержать как AZ, az и 0-9)

Сгенерированный идентификатор сеанса после изменения:

6B95cDf17411a9555D0E42d99C8E0292

Это простое и действительное изменение, или вы видите потенциальную проблему.

Спасибо.

1 Ответ

1 голос
/ 10 октября 2019

Это звучит как довольно странный тип требования - здесь важна длина базового идентификатора сеанса, а не его кодировка (существует разница между случайным идентификатором, подобным этому, и, например, паролем, который выбирает пользователь),Если идентификаторы сеанса, сгенерированные Tomcat, не считаются достаточно безопасными, лучшим вариантом, вероятно, было бы просто повысить значение параметра sessionIdLength.

С учетом вышесказанного, если вам действительно необходимо сгенерировать свой собственный идентификатор, тогда можно выбрать пользовательский org.apache.catalina.SessionIdGenerator (возможно, расширение StandardSessionIdGenerator).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...