Журнал подделки проблемы в отчете фортификации

Я создал отчет Fortify для своего приложения. В отчете Fortify он показывает проблемы подделки журналов в следующем коде:

holDate = ((MaintainHolidayCalenderForm) form).getCALENDER_DATE();
logger.info("This is some description" + holDate + holName );

и в соответствии с предложениями некоторых людей я заменил "/n" на "" и "/r" на "", но проблема все еще не решена.

Может кто-нибудь сказать мне, как решить эту проблему?

Заранее спасибо.

1 ответ

Исправление черного списка, например удаление символов очистки журнала (/n /r), все еще оставляет злоумышленнику возможность совершать вредоносные действия с вашим приложением. Если holDate и holName отправляются из браузера, они представляют собой строки UTF-8, которые могут быть очень длинными и содержать любые символы в довольно большом наборе символов Unicode UTF-8. Если журнал обычно просматривается с помощью средства просмотра HTML (обычного), пример атаки может выглядеть следующим образом: злоумышленник может подделать запись, показывающую, что он вышел из системы, выполнить свои плохие действия, а затем написать сообщение журнала, которое перезаписывает это действие, используя любой из символов Юникода, которые вызывают возврат или возврат к сообщению "дружественный злоумышленник вышел из системы - здесь ничего не видно". (Примечание: вы никогда не должны пытаться предсказать, как злоумышленник может повлиять на плохие вещи, поэтому не пытайтесь занести в черный список все способы получения символов возврата в юникоде.)

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

Итак, исправление (в коде, который вы опубликовали): 1. Убедитесь, что holDate является объектом Date (java.util.Date) если это еще не
2. HolName, вероятно, является буквенно-цифровой строкой относительно небольшой длины. Выберите небольшую длину (например, 30 символов) и убедитесь, что в holName принимаются только буквенно-цифровые символы.
Вы можете использовать регулярное выражение String.matches("^[a-zA-Z0-9]*$") после проверки длины, чтобы убедиться, что вы принимаете только буквенно-цифровые символы.

Вы, вероятно, должны выполнить эту проверку ввода белого списка в установщиках для формы pojos.

Другие вопросы по тегам