Прежде всего хочется поблагодарить автора за данную статью. Думаю эта тема актуально прежде всего для тех трейдеров, кто уже имеет свои оригинальные наработки и стремится защитить свою интеллектуальную собственность. Модель передачи торговых сигналов через сервер подходит для этой цели просто замечательно.
Alex, статья у Вас получилась отличная, но, как мне кажется, не затронут очень важный момент, а именно, как передавать все эти данные в зашифрованном в виде, через защищенное соединение (256-разрядное шифрование). Т.е. сигналы с компьютера-А через защищенное соединение передаются на сервера, в свою очередь компьютер-Б также по защищенному соединению считывает эти данные с сервера. При такой организации передачи сигналов брокер не будет иметь возможности отследить источник этих сигналов, поскольку весь трафик будет зашифрован.
Alex, что Вы об этом думаете и как эффективнее можно решить вопрос безопасности?
сразу хочу направить вас на вторую часть статьи - передача через POST и использование multipart/form-data
что касается безопасности, то я так понимаю вы говорите про работу с SSL сертификатами?
Это всё рашаемо добавлением двух флагов при создании запросов. Но я бы для SSL рекомендую работать с WinHttp.dll.
В интерфейсе создания запроса в ней практически всё идентично, но она рекламируется как более соврменная и у неё немного больше возможностей.
Да, я имел ввиду именно SSL сертификаты. Спасибо за совет, взял себе на заметку. Если я Вас правильно понял, то Вы согласны с тем, что такая модель организации передачи данных может считаться достаточной безопасной?
enotis: Да, я имел ввиду именно SSL сертификаты. Спасибо за совет, взял себе на заметку. Если я Вас правильно понял, то Вы согласны с тем, что такая модель организации передачи данных может считаться достаточной безопасной?
наверно можно еще придумать другие варианты. например шифровать свои данные самостоятельно и передавать их в открытом виде. вобщем что будет удобно, то и пользуйте.
это функция класса MqlNet, с проверкой SSL
//------------------------------------------------------------------ Requestbool MqlNet::Request(tagRequest &req)
{
if(!TerminalInfoInteger(TERMINAL_DLLS_ALLOWED)) { Print("-DLL not allowed"); return(false); } // проверка разрешенни DLL в терминалеif(!MQL5InfoInteger(MQL5_DLLS_ALLOWED)) { Print("-DLL not allowed"); return(false); } // проверка разрешенни DLL в терминалеif (req.toFile && req.stOut=="") { Print("-File not specified "); return(false); }
uchar data[]; int hRequest, hSend;
string Vers="HTTP/1.1"; string nill="";
if (req.fromFile) { if (FileToArray(req.stData, data)<0) { Print("-Err reading file "+req.stData); return(false); } }// прочитали файл в массивelseStringToCharArray(req.stData, data);
if (hSession<=0 || hConnect<=0) { Close(); if (!Open(Host, Port, User, Pass, Service)) { Print("-Err Connect"); Close(); return(false); } }
// создаем дескриптор запроса
hRequest=HttpOpenRequestW(hConnect, req.stVerb, req.stObject, Vers, nill, 0, INTERNET_FLAG_KEEP_CONNECTION|INTERNET_FLAG_RELOAD|INTERNET_FLAG_PRAGMA_NOCACHE, 0);
if (hRequest<=0) { Print("-Err OpenRequest"); InternetCloseHandle(hConnect); return(false); }
// отправляем запросint n=0;
while (n<3) // делаем две попытки отправки. первая обычная, вторая если требуется SSL
{
n++;
hSend=HttpSendRequestW(hRequest, req.stHead, StringLen(req.stHead), data, ArraySize(data)); // отправили файлif (hSend<=0) // если отправка неудачна, то проверим SSL
{
int err=0; err=GetLastError(err); Print("-Err SendRequest= ", err);
if (err!=ERROR_INTERNET_INVALID_CA) // если ошибка действительно связана с запросом SSL
{
int dwFlags;
int dwBuffLen = sizeof(dwFlags); // ставим дополнительные флаги
InternetQueryOptionW(hRequest, INTERNET_OPTION_SECURITY_FLAGS, dwFlags, dwBuffLen);
dwFlags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA;
int rez=InternetSetOptionW(hRequest, INTERNET_OPTION_SECURITY_FLAGS, dwFlags, sizeof (dwFlags));
if (!rez) { Print("-Err InternetSetOptionW= ", GetLastError(err)); break; }
}
elsebreak;
}
elsebreak;
}
if (hSend>0) ReadPage(hRequest, req.stOut, req.toFile); // читаем страницу, если отправили
InternetCloseHandle(hRequest); InternetCloseHandle(hSend); // закрыли все хендлыif (hSend<=0) Close(); // закрываем при ошибкеreturn(true);
}
Да, вариантов по шифрованию не мало, но это тема пожалуй отдельной статьи. Для начала нужно поднять модель передачи сигналов через хостинг. Спасибо за советы.
Номера ошибок разные.
ошибку исправили
в функции
int HttpOpenRequestW
надо определить 6 параметр как int, и передавать в него 0 соответственно вместо " "
int HttpOpenRequestW(int hConnect, string &lpszVerb, string &lpszObjectName, string &lpszVersion, string &lpszReferer, int lplpszAcceptTypes, uint dwFlags, int dwContext);
ошибку исправили
в функции
int HttpOpenRequestW
надо определить 6 параметр как int, и передавать в него 0 соответственно вместо " "
int HttpOpenRequestW(int hConnect, string &lpszVerb, string &lpszObjectName, string &lpszVersion, string &lpszReferer, int lplpszAcceptTypes, uint dwFlags, int dwContext);
Не работает пишет туже самую ошибку, как исправить?
я буквально неделю назад делал ревизию всех классов.
работает все отлично.
Прежде всего хочется поблагодарить автора за данную статью. Думаю эта тема актуально прежде всего для тех трейдеров, кто уже имеет свои оригинальные наработки и стремится защитить свою интеллектуальную собственность. Модель передачи торговых сигналов через сервер подходит для этой цели просто замечательно.
Alex, статья у Вас получилась отличная, но, как мне кажется, не затронут очень важный момент, а именно, как передавать все эти данные в зашифрованном в виде, через защищенное соединение (256-разрядное шифрование). Т.е. сигналы с компьютера-А через защищенное соединение передаются на сервера, в свою очередь компьютер-Б также по защищенному соединению считывает эти данные с сервера. При такой организации передачи сигналов брокер не будет иметь возможности отследить источник этих сигналов, поскольку весь трафик будет зашифрован.
Alex, что Вы об этом думаете и как эффективнее можно решить вопрос безопасности?
Alex, что Вы об этом думаете и как эффективнее можно решить вопрос безопасности?
сразу хочу направить вас на вторую часть статьи - передача через POST и использование multipart/form-data
что касается безопасности, то я так понимаю вы говорите про работу с SSL сертификатами?
Это всё рашаемо добавлением двух флагов при создании запросов. Но я бы для SSL рекомендую работать с WinHttp.dll.
В интерфейсе создания запроса в ней практически всё идентично, но она рекламируется как более соврменная и у неё немного больше возможностей.
сразу хочу направить вас на вторую часть статьи - передача через POST и использование multipart/form-data
что касается безопасности, то я так понимаю вы говорите про работу с SSL сертификатами?
Это всё рашаемо добавлением двух флагов при создании запросов. Но я бы для SSL рекомендую работать с WinHttp.dll.
В интерфейсе создания запроса в ней практически всё идентично, но она рекламируется как более соврменная и у неё немного больше возможностей.
Да, я имел ввиду именно SSL сертификаты. Спасибо за совет, взял себе на заметку. Если я Вас правильно понял, то Вы согласны с тем, что такая модель организации передачи данных может считаться достаточной безопасной?
наверно можно еще придумать другие варианты. например шифровать свои данные самостоятельно и передавать их в открытом виде. вобщем что будет удобно, то и пользуйте.
это функция класса MqlNet, с проверкой SSL
в качестве флагов еще можно ставить
dwFlags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA;
dwFlags |= SECURITY_FLAG_IGNORE_CERT_DATE_INVALID;
dwFlags |= SECURITY_FLAG_IGNORE_CERT_CN_INVALID;
в качестве флагов еще можно ставить
dwFlags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA;
dwFlags |= SECURITY_FLAG_IGNORE_CERT_DATE_INVALID;
dwFlags |= SECURITY_FLAG_IGNORE_CERT_CN_INVALID;
Здравствуйте,
Metachat - хорошая идея, и я хотел бы сам заставить его работать.
На сайте fxmaster.de больше ничего не работает - не могли бы вы предоставить PHP-исходник для metachat? Большое спасибо.