Можно ли подделать/изменить переменные области запроса с помощью внешних прокси-инструментов?

Как мы уже знаем, переменные области URL и FORM можно изменить с помощью внешних инструментов прокси.

Например, если кто-то делает такой запрос - http:\\website\index.cfm?a=1&b=2

Таким образом можно добавлять значения в область URL страницы .cfm.

Точно так же существует ли какой-либо способ добавить/изменить значение для области запроса в ColdFusion без его явной установки в коде.

Я спрашиваю об этом, потому что у нас есть такой код на одной из страниц CFM.

<cfset request.uploadFileDir = application.fileDir & "\upload" />
<cffile action="upload" accept="application/pdf" destination="#REQUEST.uploadFileDir#" filefield="brochure" nameconflict="makeunique"/>

Команда безопасности говорит, что приведенный выше код уязвим, потому что область REQUEST в JAVA может быть изменена внешними прокси-инструментами. А поскольку ColdFusion построен на основе JAVA, REQUEST ColdFusion также может быть изменен внешними прокси-инструментами. Это правильное предположение? Являются ли области JAVA и ColdFusion REQUEST одинаковыми?

Ну и напоследок главный вопрос - Можно ли каким-то внешним запросом к упомянутой выше в примере странице модифицировать область действия REQUEST или точнее переменную REQUEST.uploadFileDir?


person Pankaj    schedule 15.02.2018    source источник
comment
Какую часть java request, по их словам, можно подделать? С jsp/servlets у меня сложилось впечатление, что есть две части области request: get/setParameter() и get/SetAttribute(). Параметры больше похожи на область URL и, как вы сказали, могут быть изменены. Принимая во внимание, что атрибуты являются локальными серверными переменными и не могут быть изменены AFAIK. stackoverflow.com/a/5243798/8895292   -  person SOS    schedule 15.02.2018
comment
Я считаю, что переменные области запроса могут быть определены и присвоены значения только в программном коде. Это означает, что они не могут быть изменены напрямую. Однако, если вы присваиваете значение из области формы или URL-адреса, их можно косвенно изменить. В вашем случае посмотрите, как REQUEST.uploadFileDir получает свое значение.   -  person Dan Bracuk    schedule 15.02.2018
comment
Злоумышленники, использующие внедрение области действия, потенциально могут передавать переменные из URL-адреса или формы. У Пита Фрайтага есть краткий отчет о том, как это делается здесь и как уменьшить угрозу: petefreitag.com /item/834.cfm   -  person beloitdavisja    schedule 15.02.2018
comment
Принимая во внимание, что атрибуты являются локальными серверными переменными... поэтому область запроса CF больше похожа на атрибуты и может быть изменена только на сервере. Так что, пока application.fileDir не использует предоставленные клиентом значения (например, жестко закодированную строку и т. д.), это безопасно.   -  person SOS    schedule 15.02.2018
comment
@Ageax Думаю, они говорят о параметрах. В ColdFusion вы получаете их, используя области URL (для получения строк запроса) и FORM (для получения данных POST). На основании предоставленной вами ссылки кажется, что область ЗАПРОСА в ColdFusion больше похожа на АТРИБУТ в JAVA и ее нельзя изменить. Спасибо за первоначальную ссылку.   -  person Pankaj    schedule 16.02.2018
comment
@DanBracuk Это похоже на ответ. REQUEST.uploadFileDir не использует какие-либо переменные области URL или FORM для установки своего значения. Для его установки используется только область приложения. Таким образом, он не может быть изменен каким-либо прокси-инструментом или запросом на страницу. Вы можете опубликовать это как ответ.   -  person Pankaj    schedule 16.02.2018
comment
@Pankaj - Ой, я неправильно прочитал ваш комментарий. Да, я имел в виду, что область запроса CF похожа на request.get/setAttributes() и не может быть изменена вне сервера (кроме как косвенно, как Дэн упомянул позже). URL-адрес/форма CF похож на request.get/setParameters. Вы также можете запустить некоторые тесты, чтобы увидеть поведение самостоятельно, используя страницу JSP: helpx.adobe.com/coldfusion/developing-applications/   -  person SOS    schedule 16.02.2018


Ответы (2)


Перенесено из комментариев с благословения ОП.

Я считаю, что переменные области запроса могут быть определены и присвоены значения только в программном коде. Это означает, что они не могут быть изменены напрямую. Однако, если вы присваиваете значение из области формы или URL-адреса, их можно косвенно изменить. В вашем случае посмотрите, как REQUEST.uploadFileDir получает свое значение.

Подробнее.

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

request.foo = url.foo;

Вот пример, что нельзя.

if (this is a development ColdFusion enviornment)
request.dsn = "development database";
else
request.dsn = "production database";

Для всего есть время и место. Большая часть моей работы не использует область запроса. Одно приложение делает.

person Dan Bracuk    schedule 16.02.2018

(Продвижение этого из комментариев, чтобы ссылки было легче найти.)

Какую часть java-запроса, по их словам, можно подделать? С jsp/servlets похоже, есть 2 части Request области:

  • Параметры – request.get/setParameter()

    Параметры запроса Java больше похожи на области URL и FORM ColdFusion, и, как вы сказали, они могут быть изменены клиентом или внешними инструментами. Вероятно, это то, о чем они думают, когда говорят о фальсификации клиентов.

  • Атрибуты – request.get/setAttribute()

    Атрибуты — это локальные серверные переменные, которые нельзя изменить вне сервера. Область запроса CF больше похожа на эту. Его можно изменить только на сервере, AFAIK. (Очевидно, что он все еще может быть манипулирует косвенно, как сказал Дэн).

Если вам интересно, запустите несколько тестов на своем сервере DEV используя сценарий .jsp и .cfm, чтобы увидеть, как область запроса java отличается от ColdFusion.

TL;DR;

Я думаю, что они ошибаются. Область запроса ColdFusion не такая, как в Java.

person SOS    schedule 15.02.2018
comment
Спасибо за разъяснение двух вопросов, связанных с JAVA. Я голосую за это, поскольку это отвечает на два моих вопроса. Но поскольку на главный вопрос ответил Дэн, я отмечаю его как ответ. Очень хотелось бы, чтобы у меня была возможность отметить вас обоих как ответ, поскольку оба частично отвечают на вопросы. - person Pankaj; 16.02.2018
comment
Рад, что это помогло. - person SOS; 20.02.2018