Здравствуйте, Слава, Вы писали:
vsb>>Яснее мне не стало, почему same-origin policy или хостинг нескольких сайтов едет лесом от этой фичи. Где реально нужны сокеты — сделать ничего нельзя. Попробуй сделать торрент-клиент на JavaScript, работающий в браузере и коннектящийся по стандартному торрент-протоколу к другим клиентам.
С>Несравненно более сложную вещь, чем торрент-протокол — давно сделали. WebRTC для видео и аудио, p2p.
WebRTC реализовали на C++ и к делу это не относится. Я не скачаю дистрибутив линукса через торрент используя WebRTC или не проверю почту, используя IMAP. Предлагаешь все протоколы на свете делать частью браузера?
C>Да, оно не работает без посредника, но и торренту для начала работы требуется некий внешний трекер.
Суть не в торренте. Суть в возможности реализовать любой протокол. Torrent, SMTP, IMAP, SSH, FTP, NTP и тд, и всё это на обычном JavaScript.
Здравствуйте, fddima, Вы писали:
F>В целом ради бога, но зачем это надо — неясно.
Для того, чтобы писать более полноценные веб-приложения.
F> Тот же торрент клиент на яваскрипт — уже требует доступ к фс.
Доступ к ФС у яваскрипта есть уже много лет, File API называется.
> JS — нихрена не быстрый.
JS очень быстрый. Один из самых быстрых языков.
> И вообще веббраузер сейчас — песочница какая никакая, сокеты же неконтролируемы без доп средств. Они одним несложным циклом просто закончатся на клиенте.
Ограничения на количество открытых соединений это не проблема.
> Да еще за прокси не ходит.
Передать инфу о текущем прокси тоже не проблема.
> Легче прикрутить AJAX + Long Polling, WebSockets нежели городить что-то, что изначально обречено на провал в вебе.
Тут вопрос не в легче, тут вопрос в принципиальной возможности. Ты не сможешь работать с Jabber через WebSockets. Тебе придётся делать реализацию на сервере, JavaScript-ом передавать туда пароль от моего аккаунта и в этот момент я перестаю пользоваться таким сервисом, потому что мне не надо, чтобы мой пароль попадал в руки третьих лиц.
Здравствуйте, b0r3d0m, Вы писали:
B>А в чём, собственно, заключается проблема иметь функции для работы с TCP / UDP сокетами в API браузеров? Какие-то security reasons?
Веб, он многоликий, в отличие от простого сокета. Скажем, подключение клиента через проксю (или несколько). Подключение серверов к лоад-балансеру. Смена транспорта с HTTP на HTTPS и обратно. И т.п.
Все эти нюансы гонять в виде метаданных через обычный сокет — вот мы и переизобретаем свой HTTP. Вот только поддержка на уровне других участников сетевой инфраструктуры у него будет нулевая...
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Проснись, тебя уже обокрали — через веб-странички можно взламывать локальные роутеры и т.п. EP>
EP>https://en.wikipedia.org/wiki/Cross-site_request_forgery
EP>Customers of a bank in Mexico were attacked in early 2008 with an image tag in email. The link in the image tag changed the DNS entry for the bank in their ADSL router to point to a malicious website impersonating the bank
думаю они не браузером этот email открывали, а почтовым клиентом
Здравствуйте, chaotic-kotik, Вы писали:
EP>>Проснись, тебя уже обокрали — через веб-странички можно взламывать локальные роутеры и т.п. EP>>
EP>>https://en.wikipedia.org/wiki/Cross-site_request_forgery
EP>>Customers of a bank in Mexico were attacked in early 2008 with an image tag in email. The link in the image tag changed the DNS entry for the bank in their ADSL router to point to a malicious website impersonating the bank
CK>думаю они не браузером этот email открывали, а почтовым клиентом
Без разницы, это может быть и из браузера. Даже в это сообщение я могу встроить img url который будет дёргать твой локальный роутер изнутри сети.
Ограничения есть, безусловно, тем не менее подобные атаки применяются уже давно, и не являются фантастикой. ЕМНИП даже делают bruteforce паролей к роутерам.
Здравствуйте, fddima, Вы писали:
EP>>Я сказал что он быстрее аналогичного C# кода, а не C++. F> Фейспалм мне. Сорри, поздно — затупил.
Ув. EP из темы в тему сравнивает стоимость вызова заинлайненного метода в плюсах, странслированного в web asm пардон, в asm.js. Переклинило. (т.е. к JS оно строго говоря не относится) и делегата шарпа. Делать из этого глобальные выводы на полном серьёзе — троллинг из серии "замеряем работу с числами в питоне без numPy".
Я уже раза три намекал про "когда важен перфоманс, пишут немного в другом стиле", но чего-то не помогает. Нравится передёргивать — флаг в руки, главное чтоб остальные не велись.
Здравствуйте, Sinix, Вы писали:
S>Ув. EP из темы в тему сравнивает стоимость вызова заинлайненного метода в плюсах, странслированного в web asm пардон, в asm.js. Переклинило. (т.е. к JS оно строго говоря не относится) и делегата шарпа. Делать из этого глобальные выводы на полном серьёзе — троллинг из серии "замеряем работу с числами в питоне без numPy". S>Я уже раза три намекал про "когда важен перфоманс, пишут немного в другом стиле", но чего-то не помогает. Нравится передёргивать — флаг в руки, главное чтоб остальные не велись.
Хоть я к этому и отношусь скептически — всё же зерно истины в его словах есть, в контексте этого треда. В тот большой тред влазить неохота, я его замахался читать в прошлый раз.
Я полностью согласен, что современные JS VM — весьма годные штуки. Другое дело, что .NET в целом — на две головы выше, просто потому что голая VM очень мало кому нужна. А .NET и генерирует код и выполняет его безо всяких приседаний, и имеет кучу библиотек, и GC получше, да и сама VM куда мощнее (хотя бы на уровне примитивных типов). Мне вот не хватает в JS int64 — приходится обходится по месту, чем есть (строки — если id).
У меня профайлер в одном из hot path показывает, что время тупо уходить на интероп... ну там из std::string преобразовывается в какой-нибудь WTF::String. И такие миленькие преобразования по колстэку только в нэйтиве — происходят 3 раза, иногда с копированием, иногда ещё и с конверсией (utf8/utf16), естественно это тянет за собой и аллокации -> в итоге уже плохо. А нерегулярное пропихивание строк в 0.5-4 мегабайта, с такими преобразованиями — и перфоманс превращается в торманз. Ну ничего, бывает, а проц и кеши у нас всё равно резиновые. Будем терпеть пока все либы не перейдут на одну строку , и очевидно std::string едет лесом.
Но вот вызов колбэка в цикле... ну да, это клёва уметь инлайнить, адаптивный/спекулятивный JIT и т.п. С другой стороны тут вот GCC HashTable показывает лучшие результаты (второй, но первый выигрывает не за счет инлайнинга), хотя это чистый C и компаратор никак не может быть заинлайнен. Так что на мой взгляд — значимость в целом думаю переоценена. Естественно где-то это очень нужно, а в синтетике без этого вообще никак нельзя.
Update: А в дотнете давно-давно я занимался и ручным инлайнингом, и ручным инлайнингом алгоритмов с адаптацией под разные вариации входных данных (типа строка, буффер, указатель). Хотя лучше бы как-то уметь сказать компилятору кто здесь.
Здравствуйте, fddima, Вы писали:
F> Я полностью согласен, что современные JS VM — весьма годные штуки.
Кэп
Проблема в том, что производительность этой VM доказывается через "мы тут подкинули формат, который без проблем переводится в бинарный код, и о чудо — он работает так же быстро, как бинарный код!" Мухлёж, как ни крути.
Ну, т.е. проблема не в самом "Xxx быстрее", тут всё ок как раз. А вот с аргументацией ой.
F>Update: А в дотнете давно-давно я занимался и ручным инлайнингом, и ручным инлайнингом алгоритмов с адаптацией под разные вариации входных данных (типа строка, буффер, указатель). Хотя лучше бы как-то уметь сказать компилятору кто здесь.
Ну да. Тяжкое наследие заточенного под энтерпрайз кода. Как только речь шла о более приземлённых вещах, так сразу в форках MS research и realtime gc появлялись, и трансляция в натив нормальная и куча других плюшек. Засада в том, что "прототип? прототип" (с) в основную ветку протащить бывает на порядок сложнее, чем сам прототип сваять. Ибо совместимость, ненормальные клиенты и прочий ад.
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Без разницы, это может быть и из браузера. Даже в это сообщение я могу встроить img url который будет дёргать твой локальный роутер изнутри сети. EP>Ограничения есть, безусловно, тем не менее подобные атаки применяются уже давно, и не являются фантастикой. ЕМНИП даже делают bruteforce паролей к роутерам.
ну, справедливости ради, это уязвимость рутера, и это не доказывает что BSD сокеты в браузере — хорошая идея
Здравствуйте, vsb, Вы писали:
F>> Тот же торрент клиент на яваскрипт — уже требует доступ к фс.
vsb>Доступ к ФС у яваскрипта есть уже много лет, File API называется.
Ну вот попробуй написать файловый менеджер используя чистый браузер. Узнаешь много нового.
Здравствуйте, Ikemefula, Вы писали:
F>>> Тот же торрент клиент на яваскрипт — уже требует доступ к фс.
vsb>>Доступ к ФС у яваскрипта есть уже много лет, File API называется.
I>Ну вот попробуй написать файловый менеджер используя чистый браузер. Узнаешь много нового.
При чём тут файловый менеджер и торрент-клиент? Для торрент-клиента там хватает апи.
Здравствуйте, vsb, Вы писали:
vsb>>>Доступ к ФС у яваскрипта есть уже много лет, File API называется. I>>Ну вот попробуй написать файловый менеджер используя чистый браузер. Узнаешь много нового.
vsb>При чём тут файловый менеджер и торрент-клиент? Для торрент-клиента там хватает апи.
Кхе, кхе — а кто тебе, на секундочку, даст файл по фиксированому пути ? Какие браузеры это умеют ? Что делать с остальными ?
Здравствуйте, vsb, Вы писали:
vsb>Здравствуйте, hi_octane, Вы писали:
vsb>>>Коннекты на локальные IP-адреса можно запретить, это разумно. А в чём проблема коннектов на внешние адреса? _>>Любая уязвимость типа "внедрение javascript", мгновенно превращает посетителей любого сайта в большой ботнет, которым можно досить, скликивать рекламу, накликивать посещаемость и т.п.
vsb>Это и сейчас можно делать. Добавляешь тег <img src="http://rsdn.ru/"/> на какую-нибудь lenta.ru и получаешь ддос. И рекламу скликивать можно, и POST-ы делать. Нельзя только читать ответ от такого запроса. Но ДДОСу это не мешает.
Тут запрос будет только один раз, а в случае с js — сколько угодно.
Здравствуйте, Skorodum, Вы писали:
_>>>Любая уязвимость типа "внедрение javascript", мгновенно превращает посетителей любого сайта в большой ботнет, которым можно досить, скликивать рекламу, накликивать посещаемость и т.п.
vsb>>Это и сейчас можно делать. Добавляешь тег <img src="http://rsdn.ru/"/> на какую-нибудь lenta.ru и получаешь ддос. И рекламу скликивать можно, и POST-ы делать. Нельзя только читать ответ от такого запроса. Но ДДОСу это не мешает. S>Тут запрос будет только один раз, а в случае с js — сколько угодно.
Ну добавь миллион таких тегов, будет долбить без перерыва.
Здравствуйте, chaotic-kotik, Вы писали:
CK>Здравствуйте, b0r3d0m, Вы писали:
B>>А в чём, собственно, заключается проблема иметь функции для работы с TCP / UDP сокетами в API браузеров? Какие-то security reasons?
CK>Сейчас js может делать http запросы только к своему домену (https://en.wikipedia.org/wiki/Same-origin_policy), если страничка делает запрос к чужому домену, то js не может получить результаты запроса. Еще обязательно возникнут проблемы с web proxy, поэтому те же веб сокеты работают поверх http(s). В общем, BSD сокеты — огромная дырища в безопасности, представь что ты зашел на страничку, на страничке js который может вообще к чему угодно приконнектиться, видит все что находится в твоей сети через твой локальный multicast dns и передает это на сайт или куда-нибудь еще. В общем, вопрос крайне наивный. Такого не будет никогда.
Почему про CORS забываем?
Cross-origin resource sharing
Здравствуйте, vsb, Вы писали:
vsb>Ничего не понял. Можно подробней. Я не предлагал ограничивать соединения исходным сайтом. Конечно же любой сайт может коннектиться к любому внешнему IP-адресу.
т.е. да здравствуйет ddos от сотен миллионов пользователей веба. И нет, существующими методами через javascript DDoS через, к примеру, dns вы не организуете.
F>> 2. Кто это такие "внешние адреса"? Например хосты в моем LAN — внешние? Узлы доступные через VPN — внешние? Откуда ты знаешь какой у меня роутинг и кто и по каким маскам в какой интерфейс попадает.
vsb>Это внутренние. Остальные внешние. Твой роутинг никого не интересует.
т.е. о "белых" подсетях вы не слышали? И про то, что изнутри к ним доступ, зачастую, куда более открытый, чем снаружи.
vsb>Надуманная проблема. Хочешь ограничить — ставь нормальную защиту. Твоё описание это не защита, а фарс.
Ограничение доступа на уровне сети — фарс? Ок, видимо файерволы не нужны, сам vsb сказал-же.