Runtime.getRuntime() внутри JSP и безопасности

#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% ужасающий.