Проверьте, является ли введенный открытый ключ действительным ключом OpenPGP.

Я использую класс GnuPG из PHP. У меня нет проблем с импортом действительного открытого ключа, но если я пытаюсь импортировать что-то случайное, например «test», который явно не является открытым ключом, я получаю ошибку 502 bad gateway. Я видел в документации PHP, что gnupg_keyinfo показывает информацию о введении имени, хранящегося в связке ключей. Я искал в Интернете и не нашел способа проверить, находится ли введенный открытый ключ в правильном формате или нет.
Я использую следующий кусок кода:

<?php
putenv('GNUPGHOME=/home/kevin/.gnupg');
$gpg = '/usr/bin/gpg';
$gpg = new gnupg();
$gpg->seterrormode(gnupg::ERROR_EXCEPTION);

if(isset($_POST['2fa'])){
try {
$key = $_POST['new_pgp'];
$retVal = $gpg->import($key);
echo $retVal['imported'] . ' key(s) imported.';
} catch (Exception $e) {
die('ERROR: ' . $e->getMessage());
}

}
?>
<html>
<body>
<form action="pgp.php" method="post">
<textarea name="new_pgp"></textarea><br>
<input type="submit" name="2fa" value="Send">
</form>
</body>
</html>

3

Решение

Ошибка 502 «Bad Gateway» указывает, что соединение между веб-сервером и чем-то позади него было прервано — это происходит, например, при использовании nginx вместе с php-fpm, доступ к которому осуществляется через другое сетевое соединение / сокет. В комментариях, запрашивающих дополнительную отладочную информацию, вы подтвердили это предположение, а также поняли, что php не работает из-за ошибка сегментации, Это означает, что к некоторой недопустимой ячейке памяти следовало обратиться.

Это может произойти либо из-за ошибки (которую я бы не ожидал в этом случае, так как неверный ключ — не совсем неожиданный ввод, который никто не будет проверять), либо из-за того, что скомпилированные версии на самом деле не подходят друг другу. Вы объяснили, что строите некоторые части самостоятельно.

Отладка это хлопотно и часто занимает часы и часы, вам нужно подключить отладчик и понять, что происходит не так. Если у вас есть шанс, попробуйте установить все из менеджера пакетов по вашему выбору, не используйте другие источники, такие как PECL и менеджер пакетов, чтобы избежать проблем. В Debian (и, скорее всего, также в Ubuntu и других дистрибутивах, я не проверял) какой-то пакет вроде php5-gnupg должно быть доступно:

$ apt-cache show php5-gnupg
Package: php5-gnupg
Source: php-gnupg
Version: 1.3.6-1
Installed-Size: 84
Maintainer: Debian PHP PECL Maintainers <[email protected]>
Architecture: amd64
Depends: phpapi-20131226, php5-common (>= 4.4), libc6 (>= 2.4), libgpgme11 (>= 1.2.0)
Description-en: wrapper around the gpgme library
This extension provides methods to interact with gnupg.
[snip]
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]