в наше время можно читать очень об инжекции кода, использовании, буфере - стек - и переполнении "кучи", и т.д. ведущем, чтобы ввести и выполнить код. Интересно, что из этого материала важно для Java.
Я знаю, на языке Java нет никаких указателей. Но разве JVM не организует данные в "куче" и / или стеки? Я знаю, что нет никакой функции оценки (как в PHP), таким образом, Вы наклоняетесь, легко используют вход в качестве кода Java. Я не так уверен, что продолжается на уровне байт-кода.
Я думаю, что XSS возможен, например, в JAVA EE-приложении, когда никакие исходные данные не фильтрованы. Но действительно ли это не больше инжекция JavaScript, потому что введенный код работает в браузере а не в JVM?
Таким образом, которые кодируют инжекции, возможны с Java и которые не являются? И действительно ли это верно для других языков платформы Java, также?
Заранее спасибо.
Сама программа java практически не уязвима для внедрения кода. Однако весь собственный код, поддерживающий приложение, уязвим для всех видов инъекций кода - включая JVM и все части собственного кода в приложении или его библиотеках.
Кроме того, есть еще несколько вещей, которые следует учитывать :
Все, где java используется в качестве шлюза для других систем, возможно:
Если серверное приложение создает байт-код во время выполнения (например, с помощью BCEL или Javassist ), и если на это создание может повлиять пользовательский ввод, то возможно внедрение кода.
Однако, если ваше приложение не использует магию (а это должно быть 99% всех приложений), это будет невозможно.
Вы можете написать веб служба, которая приняла фрагмент кода Java, обернула его в объявление класса / метода, сохранила на диск, запустила на нем компилятор, а затем динамически загрузила и выполнила результат. Таким образом, внедрение кода, безусловно, возможно.
Но с типичными реализациями Java это, возможно, не очень эффективно из-за относительно тяжелого процесса компиляции (хотя это может быть практичным для некоторых приложений).
Внедрение кода очень актуально для SQL потому что "первая догадка" многих новичков - использовать конкатенацию строк для вставки переменных в оператор. Но это редко возникает как идея среди программистов Java. Так вот почему это не так
Если бы это было возможно, Java была бы мертва надолго.
С другой стороны, SQL-инъекций очень легко избежать, используя PreparedStatement
для хранения ввода, управляемого пользователем, и XSS также очень легко избежать, используя
для (повторного) отображения ввода, управляемого пользователем, на веб-странице.
Вы не можете внедрить Java. Но если вы не будете осторожны, люди могут внедрить Javascript (то есть XSS, как вы упомянули) или SQL. Есть груды и стопки, но до них нет пути.
Если вы не делаете странные вещи на сервере (например, динамически генерируете код и т. Д.), Невозможно настроить загрузку кода для внедрения кода.
Хотя я могу вспомнить (уродливый) ситуация, когда приложение динамически создает JSP на основе пользовательского ввода. Этот JSP будет преобразован в код Java, который компилируется в байт-код веб-контейнером, а затем выполняется. Это может привести к появлению точки инъекции. Но динамическое создание JSP обычно не имеет никакого смысла.
Вы не можете внедрить java, но все веб-приложения уязвимы для XSS, если ввод не фильтруется должным образом. Также любое приложение, которое взаимодействует с базой данных sql, может быть уязвимо для SQL-инъекции. Чтобы избежать этого, вам следует изучить параметризованные запросы.