2

Прежде чем вы думаете, я должен опубликовать это на другом форуме - это вопрос, связанный с ОС Windows, а не программирование.

Я создаю интранет-сайт, который требует авторизации пользователя через Kerberos. После нескольких дней исследований я думаю, что использование PHP для этого не является лучшим способом сделать это, и мне нужно найти другое решение. Таким образом, у меня появилась идея, которая работает очень хорошо: я могу использовать свои знания в C #, чтобы использовать .NET Framework для своей работы. Поэтому я написал (пока) небольшое приложение, которое использует Kerberos для проверки учетных данных пользователя. Я запускаю приложение из PHP, чтобы проверить его код возврата что-то вроде:

myapplication.exe имя_пользователя password1!

(в ближайшее время он получит больше информации через командную строку)

Он возвращает код, основанный на проверке авторизации, поэтому мое PHP-приложение знает, было ли оно успешным или нет. Авторизация Kerberos зашифрована (это было очень легко с .NET), поэтому у меня есть "две птицы одним камнем". Конечно, весь процесс более сложный, поэтому мне не нужно использовать его каждый раз, когда пользователь входит в систему, но здесь дело не в этом.

Я задаю вопросы, потому что могу узнать что-то полезное и хочу быть уверенным:

Действительно ли этот подход безопасен? Кто-нибудь может получить пароль, который я передаю в командную строку? Это может быть зарегистрировано где-нибудь? И если да - могу ли я это предотвратить? Если это небезопасно - могу ли я передавать учетные данные более безопасно?

Это действительно только один вопрос "Это безопасно?"но я хочу дать вам некоторое представление о том, что я прошу. Я не хочу заходить слишком далеко с этим, если я не уверен, что это хорошая идея. Кроме того, пока все работает отлично.

Я использую сервер Apache на Windows Server с базой данных MySQL (вероятно, изменится на MSSQL Express).

[EDIT] Я должен отметить, что я использую команду exec() в PHP. Я спрашиваю, можно ли каким-то образом установить связь между службой Apache, запускающей / запускающей myapplication.exe, потому что пароль передается единовременно только в виде простого текста.

1 ответ1

1

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

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

Кроме того, вы должны быть очень осторожны при передаче пользовательских аргументов командной строки, или я просто введу ; rm -rf / как имя пользователя. ;)


Кстати, этот метод будет иметь значительное влияние на производительность, если вы не будете активно кэшировать возвращаемые значения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .