Как защитить открытое соединение imap
Я использую imap_open() для установления соединения с моим почтовым сервером для проверки отправленных писем.
$pop3conn = imap_open('{localhost:110/pop3}', MAILLOGIN, MAILPWD);
if($pop3conn == false)
echo'<br />no conn';
else
{
// check mail headers and bodies
}
Я получаю уведомление PHP о небезопасной аутентификации:
Уведомление: Неизвестно: ПРОБЛЕМА БЕЗОПАСНОСТИ: объявлен небезопасный сервер AUTH=ОБЫЧНЫЙ (errflg=1) в неизвестном в строке 0
Я искал на php.net и часами гуглил, но не мог найти решения, как от этого избавиться.
Единственное, что я обнаружил, также не сработало: добавление /защита в имя сервера.
$pop3conn = imap_open('{localhost:110/pop3/secure}', MAILLOGIN, MAILPWD);
Затем я получаю:
Примечание: Неизвестно: Не удается выполнить безопасную аутентификацию с помощью этого сервера (errflg=2) в неизвестном в строке 0
Заранее спасибо за любую помощь!
3 answers
Я немного удивлен, что это дает вам in Unknown on line 0
, поскольку обычно это происходит только тогда, когда ошибка возникает до того, как скрипт начнет выполняться - однако единственным реальным решением этой проблемы является скрытие ошибок PHP.
Похоже, что сервер, к которому вы подключаетесь, не поддерживает безопасную аутентификацию, и единственное решение этой проблемы - попросить администратора сервера поддержать ее. Или использовать другой сервер. В своем коде вы ничего не можете сделать, чтобы обойти это особая проблема, поэтому вам просто придется обработать ошибку вместо того, чтобы пытаться ее исправить (как бы я ни ненавидел рекомендовать этот подход кому-либо для чего-либо).
Вы можете обнаружить, что даже вызов ini_set('display_errors', 0)
или использование оператора evil @
не исправит этого, так как это in Unknown on line 0
- хотя вы все равно не должны показывать ошибки PHP в производственной среде. Вы должны убедиться, что ваш php.ini в рабочей среде настроен так, чтобы скрывать ошибки от пользователя.
На самом деле это не поддельное сообщение, это просто означает, что это незашифрованное соединение с открытым текстом. Вот как вы можете это сделать:
$error = imap_errors();
if (count($error) > 1 || $error[0] != 'SECURITY PROBLEM: insecure server advertised AUTH=PLAIN') {
// More than 1 error or not the expected error
var_dump($error);
throw new Exception('IMAP error detected');
}
Вопросу несколько лет, но я столкнулся с той же проблемой:
imap_open("{imap.domain.com:143}INBOX", 'username', 'password');
Приводит меня к ошибке SECURITY PROBLEM: insecure server advertised AUTH=PLAIN
.
Итак, там говорится, что я отправляю учетные данные незащищенными. Все, что мне нужно было сделать, это обратиться к своему почтовому провайдеру, чтобы узнать любой другой способ безопасного подключения.
Стандартными портами являются:
Protocol Unsecured Secured
POP3 110 995 (SSL, TLS)
IMAP4 143 993 (SSL, TLS)
SMTP 25 465 (SSL), 587 (TLS, STARTTLS)
И в соответствии с документацией функции PHP imap_open() Я изменил параметры следующим образом:
imap_open("{imap.domain.com:993/imap/ssl}INBOX", 'username', 'password');
Итак, теперь у меня есть связь зашифрованный/защищенный, и PHP больше не сообщает об ошибках.