LINUX.ORG.RU

системный вызов из пхп-скрипта. проверить агрумент на наличие команд для shell


0

1

прошу помощи в решении следующей задачи.

имеется сервер с linux redhat, веб-интерфейс,пхп-файл, перл-файл. пхп-файл передаёт переменную перл-файлу посредством командного вызова. то есть `system /блабла/перл-файл переменная`. перловый файл на входе непроверяет полученную переменную и использует ей.

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

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

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

подскажите пожалуйста какие еще способы может использовать злоумышленник чтобы нарушить работу системы?

Попробуйте использовать не system(), а exec() (или что там есть в PHP на эту тему).

AITap ★★★★★ ()
Ответ на: комментарий от AITap

в пхп-документации по команде exec нашел следующее:

Если вы разрешаете передачу данных от пользователя в эту функцию, то должны использовать escapeshellarg() или escapeshellcmd(), чтобы гарантировать, что пользователь не сможет заставить вашу ОС выполнять произвольные команды.

по escapeshellarg следующее:

escapeshellarg() добавляет одинарные кавычки вокруг строки и закавычивает/escape-ирует любые имеющиеся одинарные кавычки, позволяя передавать строку непосредственно в функцию оболочки и рассматривать её как единый безопасный аргумент.Эта функция должна использоваться для escape-ирования отдельных аргументов shell-функций, приходящих от пользовательского ввода.shell-функции включают exec(), system() и операцию backtick.

спасибо за пинок

cyklop77 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.