#shell #jsp #security #unix
#оболочка #jsp #Безопасность #unix
Вопрос:
Из JSP мне нужно вызвать оболочку Unix.
Для этого я попробовал следующий код в качестве примера :
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<%
try {
Runtime runtime = Runtime.getRuntime();
Process exec = runtime.exec(new String[]{"/path/to/shell/myshell.sh", "param1", "param2"});
int i = exec.waitFor();
System.out.println(i);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
%>
hi
</body>
</html>
Все в порядке, моя оболочка правильно вызывается JSP, и JSP получил взамен правильное значение.
Хотя код выполняется на стороне сервера, является ли проблемой для безопасности вызов оболочки Unix из JSP? Есть ли какие-либо предварительные условия для этого?
Комментарии:
1. Если это небезопасно, зависит. Являются
param1
иparam2
постоянными? Если да, то это безопасно. Если параметры представляют собой значения, полученные через JSP или «под влиянием пользователя», это может привести к проблеме безопасности.2. Нет param1 и param2 не являются постоянными. Они создаются JSP в зависимости от значения, возвращаемого браузером пользователя.
3. Я не эксперт по сценариям оболочки Linux, но передача пользовательских значений в качестве параметра, по-МОЕМУ, очень рискованна (риск выполнения произвольной команды). Может быть, вы можете изменить сценарий оболочки для получения значений через стандартный интерфейс? AFAIK это должно быть безопасно.
4. @gduh итак, вы передаете переменные, контролируемые злоумышленником, в Runtime.exec()? Я не понимаю, почему эта важная информация была удалена из вашего вопроса. Предоставленный фрагмент кода на 100% неиспользуем, комментарий, который вы сделали, на 100% ужасающий.