Указанные вами проблемы не решаемы в абсолютном смысле.Ни один сервер не защищен на 100%, и к каждой атаке «человек посередине» можно пойти еще дальше.
Я предлагаю более конкретно определить требования к безопасности сервера.В противном случае каждое решение будет отсутствовать, потому что в абсолютном выражении они всегда есть.Например, используйте session_save_path () и поместите данные сеанса в другое место, если вас беспокоит «/ tmp».
Когда речь идет о противодействии атакам типа «человек посередине», тогда убер-подходиспользовать одноразовую панель , предварительно обменивающуюся в автономном режиме.Это то, что делают агентства безопасности - все другие варианты оставляют ваше приложение более или менее зависимым от благодатия устройств между вашим сервером и пользовательским агентом.Поэтому вам необходимо определиться с уровнем допуска.
Один достаточно безопасный метод аутентификации - подтверждение нулевого знания .Требуется, чтобы ваше приложение знало только открытый ключ пользователя.Нет паролей, нет секретов.Дело в том, что когда пользователь хочет войти в систему, ваше приложение должно ответить случайным сообщением, зашифрованным открытым ключом этого пользователя.Если другая сторона отправляет обратно правильное случайное сообщение, то это указывает на наличие соответствующего закрытого ключа.Следовательно, пользователь аутентифицирован.Чтобы предотвратить прослушивание, перед отправкой ответа заставьте useragent зашифровать правильный ответ с помощью открытого ключа приложения.Однако реализация необходимой функциональности и достойного графического интерфейса для всего этого не будет тривиальной задачей.