michaellukashov / Far-NetBox

SFTP/SCP/FTP/FTPS/WebDAV/S3 client for Far Manager 3 (http://farmanager.com/)
https://forum.farmanager.com/viewtopic.php?t=6317
GNU General Public License v2.0
158 stars 52 forks source link

NetBox v2.4.5.526/.527 - игнорирование RFC-1738 при разборе анонимных URL начиная с WinSCP v5.10.3 beta #255

Open VictorVG opened 7 years ago

VictorVG commented 7 years ago

Вылезло :( - если мы задаём URL не содержащий полей UserName и Password то WinSCP отсылает на сервер запрос с пустыми именем юзера и паролем что приводит к ошибке логона на анонимные FTP сервера.

По крайней мере сниффер в потоке от WinSCP v5.11.0.7715 Portable при расшифровке идущих на PureFTPd пакетов показывает что в случае если в URL не задана пара UserName:Pasword при скинутом флаге Anonymous login утилита посылает на сервер пакеты с пустыми именем пользователя и паролем, ну и результат ожидаем - ответ сервера Access denied:

1

2

3

это тот же, но уже на локальный PureFTPd в роутере под Linux:

4

Как решение я вижу два возможных варианта:

1) исправление в коде WinSCP, но тогда придётся его править постоянно; 2) самим добавитт в наш алгоритм фрагмент который будет проверять наличие в URL имени пользователя и пароля и при их отсутствуии добавлять в URL фрагмент типа anonymous:example.com@ который автоматически обеспечит анонимный логин.

Решение предлагаемое в п. 2. позволит одновременно решить и сопутствующую задачу правки сохранённых анонимных сессий т.к. ранее в них при пустом поле UserName автоматически подставлялось имя пользователя anonymous (NetBox v2.4.4.524):

5

, а после обновления WinSCP до версии 5.10.3 beta при создании новой сессии в NetBox v5.2.5.527 видим:

6

что по умолчанию поля UserName и Password теперь пустые и пользователь должен их заполнить самостоятельно.

Я конечно сваял костыль на время, но чтой-то у меня вылезли проблемы с LuaMacro :) . Код скрипта:

-- FTP URL - insert anonymouse and empty password if needed, VictorVG @ VikSoft.Ru
-- v1.1, refactoring, 07.09.2017 00:30:39 +0300
-- v1.2, refactoring, 07.09.2017 01:04:44 +0300

local prf=mf.substr(CmdLine.Value,0,4);
local msk="/(?:ftp:|sftp|ftps)/i"
local cl=CmdLine.Value;
local nb="42E4AEB1-A230-44F4-B33C-F195BB654931";
local usr="://anonymous:user@server.com@";
Macro{
  id="ABE45282-10B9-426F-BA93-9F9B86AC6FF0";
  area="Common";
  key="NumEnter Enter MsM1Click MsRClick";
  description="FTP URL - insert anonymouse and empty password if needed";
  flags="NotEmptyCommandLine";
  priority=90;
  condition=function() return mf.iif(prf==msk,true,nil) and not mf.index(cl,"@") end;
  action=function()
  Far.DisableHistory(-1)
  local cv=mf.iif(mf.substr(cl,4,1)==":",mf.replace(cl,"ftp://","ftp"..usr,1,0),mf.replace(cl,prf.."://",prf..usr,1,0));
  Plugin.Command(nb,cv);
  end;
}

ну, при нужде не долго и список распознаваемых протоколов дополнить, хотя не сильно хочется косыль оставлять. :)

VictorVG commented 7 years ago

Если в комстроке WinSCP дать команду winscp ftp://192.168.1.1/ , то получим:

Opening session using command-line parameter in scripting is deprecated. Use 'open' command instead. Prompting for credentials... Username:

Authentication failed. winscp>

т.е. парсер не подставляет логин если в URL не задано имя пользователя.

VictorVG commented 7 years ago

В новой WinSCP v5.11.1 рекомендации RFC-1738 проигнорированы ибо их исполнение не обязательно. И в доках про это молчат - не обязательно, значит обойдутся!

VictorVG commented 6 years ago

NetBox v2.4.5.529 - баг не исправлен.

VictorVG commented 6 years ago

в NetBox 2.4.5.531 не исправлено, авторы WinSCP баг-репорты по данной проблеме игнорируют.