Действительно ли код является инжекцией, возможной в Java?

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

Я знаю, на языке Java нет никаких указателей. Но разве JVM не организует данные в "куче" и / или стеки? Я знаю, что нет никакой функции оценки (как в PHP), таким образом, Вы наклоняетесь, легко используют вход в качестве кода Java. Я не так уверен, что продолжается на уровне байт-кода.

Я думаю, что XSS возможен, например, в JAVA EE-приложении, когда никакие исходные данные не фильтрованы. Но действительно ли это не больше инжекция JavaScript, потому что введенный код работает в браузере а не в JVM?

Таким образом, которые кодируют инжекции, возможны с Java и которые не являются? И действительно ли это верно для других языков платформы Java, также?

Заранее спасибо.

13
задан Arjan Tijms 24 July 2013 в 06:59
поделиться

7 ответов

Сама программа java практически не уязвима для внедрения кода. Однако весь собственный код, поддерживающий приложение, уязвим для всех видов инъекций кода - включая JVM и все части собственного кода в приложении или его библиотеках.

Кроме того, есть еще несколько вещей, которые следует учитывать :

Все, где java используется в качестве шлюза для других систем, возможно:

15
ответ дан 1 December 2019 в 21:12
поделиться

Если серверное приложение создает байт-код во время выполнения (например, с помощью BCEL или Javassist ), и если на это создание может повлиять пользовательский ввод, то возможно внедрение кода.

Однако, если ваше приложение не использует магию (а это должно быть 99% всех приложений), это будет невозможно.

4
ответ дан 1 December 2019 в 21:12
поделиться

Вы можете написать веб служба, которая приняла фрагмент кода Java, обернула его в объявление класса / метода, сохранила на диск, запустила на нем компилятор, а затем динамически загрузила и выполнила результат. Таким образом, внедрение кода, безусловно, возможно.

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

Внедрение кода очень актуально для SQL потому что "первая догадка" многих новичков - использовать конкатенацию строк для вставки переменных в оператор. Но это редко возникает как идея среди программистов Java. Так вот почему это не так

3
ответ дан 1 December 2019 в 21:12
поделиться

Если бы это было возможно, Java была бы мертва надолго.

С другой стороны, SQL-инъекций очень легко избежать, используя PreparedStatement для хранения ввода, управляемого пользователем, и XSS также очень легко избежать, используя для (повторного) отображения ввода, управляемого пользователем, на веб-странице.

2
ответ дан 1 December 2019 в 21:12
поделиться

Вы не можете внедрить Java. Но если вы не будете осторожны, люди могут внедрить Javascript (то есть XSS, как вы упомянули) или SQL. Есть груды и стопки, но до них нет пути.

0
ответ дан 1 December 2019 в 21:12
поделиться

Если вы не делаете странные вещи на сервере (например, динамически генерируете код и т. Д.), Невозможно настроить загрузку кода для внедрения кода.

Хотя я могу вспомнить (уродливый) ситуация, когда приложение динамически создает JSP на основе пользовательского ввода. Этот JSP будет преобразован в код Java, который компилируется в байт-код веб-контейнером, а затем выполняется. Это может привести к появлению точки инъекции. Но динамическое создание JSP обычно не имеет никакого смысла.

1
ответ дан 1 December 2019 в 21:12
поделиться

Вы не можете внедрить java, но все веб-приложения уязвимы для XSS, если ввод не фильтруется должным образом. Также любое приложение, которое взаимодействует с базой данных sql, может быть уязвимо для SQL-инъекции. Чтобы избежать этого, вам следует изучить параметризованные запросы.

0
ответ дан 1 December 2019 в 21:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: