В репозитории NPM выявлено 25 вредоносных пакетов, которые распространялись с использованием тайпсквоттинга, т.е. с назначением имён, похожих на названия популярных библиотек, с расчётом на то, что пользователь допустит опечатку при наборе имени или не заметит различий, выбирая модуль из списка...Подробнее: https://www.opennet.ru/opennews/art.shtml?num=56746
> В репозитории вредоносных пакетов NPM выявлено еще 25 пакетовПоправлено.
во вредозитории NPM
Все тоже самое можно сделать и в maven и в pip и в репозиториях cpp
npm ничем не отличается от любого другого репозитория
> npm ничем не отличается от любого другого репозиторияВсе (любые) рипозитарии принадлежат M$?
Ms хотябы репозиторий которым пользуются закрывать не стал бы, как сделал JFrog с JCenter оставив без 10 лет работающих библиотек
ALL YOUR BASE ARE BELONGS TO US
не правда ваша, от любой другой помойки да, ничем не отличается, а вот когда репозиторий ведет группа ментейнеров, которая следит за его наполнением и, соответственно, содержимым, то это другое дело
>помойку ведёт группа васянов никак не отвечающих за это, но кричащих, что они не васяны, а серьезный высеr..проект.Починил.
да ну, бред какой-то. Я уверен что в нем было больше чем 25 пакетов.
Тот, кто тащит блестяшки из паразитария либо ребенок, либо жадный де6ил( в медицинском смысле), либо примитивный жадный до лёгких денег мудак
Либо нескучный йезычок требующий отдельный пакет в паразитарии для выравнивания слева, черезмерно трудозатратен для написания тривиальных вещей.
Как бы самому прогать на такой штука... сам панимаиш...
[] + [] → "" // Empty string? These are arrays!
[] + {} → [object object]
{} + [] → 0 // Why isn't the operation commutative???
{} + {} → NaN // ???
16 == [16] → true // Array converted into string, then into number
16 == [1,6] → false // But what is array converted into?
"1,6" == [1,6] → true
var arr = [];
arr.length → 0
arr[3] → "undefined" // No array bounds exception???
arr[3] = "hi";
arr.length → 4 // 4??? Only one element has been added!
arr["3"] → "hi" // Apparently "3" is coerced into a number
delete(arr[3]);
arr.length → 4 // 4??? There are no elements in the array!
arr[3] → "undefined" // 7 lines above, length was "0"!
var i = 1;
i = i + ""; // Oops!
i + 1 → "11"
i - 1 → 0
var j = "1";
++j → 2 // Okay, but...var k = "1";
k += 1 → "11" // What???[1,5,20,10].sort() → [1, 10, 20, 5] // Why is it sorting strings???
xs = ["10", "10", "10"];
xs.map(parseInt) → [10, NaN, 2] // ???
y = {};
y[[]] = 1;
Object.keys(y) → [""]
как бы это сказать помягче: ты кодишь так, как и следует ожидать от человека вроде тебя.[] + []; // TS2365 // классика жанра: ты и сам не знаешь, что
// такое "сложить массив с массивом":
// сумма элементов? сложение матриц?
// [1,3] + [3,5] == [4,8] или [1,3,3,5] или 12 или еще что?
[] + {}; // TS2365
{} + []; // ESLint(no-empty) ESLint(no-implicit-coercion)
{} + {}; // ESLint(no-empty) ESLint(no-implicit-coercion)
16 == [16]; // TS2367
16 == [1,6]; // TS2367
"1,6" == [1,6]; // TS2367var arr = []; // TS7034
arr[3] // TS: string | undefined
arr.length → 4 // 4??? // RTFM ECMAScript
delete(arr[3]); // ESLint(space-unary-ops)
arr.length → 4 // 4??? // RTFM ECMAScriptvar i = 1;
i = i + ""; // TS2322
var j = "1";
++j; // TS2356[1,5,20,10].sort(); // ESLint(@typescript-eslint/require-array-sort-compare)
xs.map(parseInt); // function parseInt(string: string, radix?: number | undefined)y = {};
y[[]] = 1; // TS2538
> как бы это сказать помягче: ты кодишь так, как и следует ожидать
> от человека вроде тебя.Подгар хорош. А что, цитирование стандарта делает его логичнее? Это не мое шедевр с314жен прямо с опеннета же, просто ранее, понравилось уж очень. Очень прикольно когда операции не коммутативны, а результат операций поражает стройностью разнообразия. Не, серьезно, += 1 и ++ должно быть разным деянием? Логика :). Но может, нарков из ECMA стоило бы уволить?
> Но может, нарков из ECMA стоило бы уволить?Зачем? Мир станет гораздо скучнее.
И да, это все не помешало другим норкоманам написать на ЭТОМ цельный онлиофис. Нет, я тоже не знаю, как и почему.
А теперь смертельный номер: они попробуют его поддерживать, и посмотрим насколько их хватит :). Хотя-бы половину от опенофиса протянут?
В смысле? Они его поддерживают много лет, и продолжают активно допиливать фичи.Причем без всяких там апачевских могильников с бесконечными деньгами за спиной.
Каким чудом оно работает и при этом его еще и умудряются развивать - для меня полнейшая загадка. Вероятнее всего отгадка лежит где-то в той же плоскости, что и ответ на вопрос "почему впопенофис по прежнему безальтернативно портит вордовые документы, хотя и написан на православнейшем C++".
А где конкатенация комутативна?
> А где конкатенация комутативна?Для начала какого оно в одном случае конкатенация, а в другом нет, хотя оператор один и тот же по смыслу? И вам не кажется что в этом случае динамическая типизация заходит слишком уж далеко, делая мягко говоря, не совсем логичные и симметричные вещи?
> прогать на такой штука...
> // Oops!
> // Okay, but...
> // What???язык изучить не пробовал сначала?
документацию, там, почитать, примеры посмотреть, не?не пиши на нём.
> не пиши на нём.Я и не пишу, чур меня на таком прогать. Просто очень уж прикольный пример сжато иллюстрирующий стройность дизайна и логичнсть языка :)
Я понял, почему народ кодит на JS, поглядев на современный энтерпрайзный C++
https://devblogs.microsoft.com/oldnewthing/20220222-00/?p=10...You can substitute any other object that follows this same pattern. You don’t even have to have a real kernel object. You just need something that can pretend to be a kernel object enough to satisfy the ISynchronize contract.
struct MySynchronize : winrt::implements<MySynchronize, ::ISynchronize>
{
winrt::com_ptr<::IUnknown> m_inner;
int32_t query_interface_tearoff(winrt::guid const& id, void** object)
const noexcept override {
if (m_inner) return m_inner.as(id, object);
return E_NOINTERFACE;
}wil::slim_event ready;
STDMETHODIMP Reset() { ready.ResetEvent(); return S_OK; }
STDMETHODIMP Signal() { ready.SetEvent();
printf("Call completed!\n"); // do cool stuff here
return S_OK; }
STDMETHODIMP Wait(DWORD flags, DWORD timeout) {
assert(is_mta()); // we won't be pumping messages
assert(!(flags & COWAIT_ALERTABLE)); // we won't be waiting alertably
return ready.wait(timeout) ? S_OK : RPC_S_CALLPENDING;
}static bool is_mta() {
APTTYPE type;
APTTYPEQUALIFIER qualifier;
THROW_IF_FAILED(CoGetApartmentType(&type, &qualifier));
return type == APTTYPE_MTA;
}
};A simpler way is to delegate the ISynchronize methods back to the call object:
struct MySynchronize :
winrt::implements<MySynchronize, ::ISynchronize, winrt::non_agile>
{
winrt::com_ptr<::IUnknown> m_inner;
int32_t query_interface_tearoff(winrt::guid const& id, void** object)
const noexcept override {
if (m_inner) return m_inner.as(id, object);
return E_NOINTERFACE;
}auto Sync() { return m_inner.as<ISynchronize>(); }
STDMETHODIMP Reset() { return Sync()->Reset(); }
STDMETHODIMP Signal() {
auto hr = return Sync()->Signal();
printf("Call completed!\n"); // do cool stuff here
return hr;
}
STDMETHODIMP Wait(DWORD flags, DWORD timeout) {
return Sync()->Wait(flags, timeout);
}
};
Let’s take this out for a spin.int main(int, char**)
{
winrt::init_apartment(winrt::apartment_type::multi_threaded);auto pipe = CreateSlowPipeOnOtherThread();
auto outer = winrt::make_self<MySynchronize>();
auto factory = pipe.as<ICallFactory>();
winrt::check_hresult(factory->CreateCall(
__uuidof(::AsyncIPipeByte), winrt::get_unknown(*outer),
__uuidof(::IUnknown), outer->m_inner.put()));
auto call = outer.as<::AsyncIPipeByte>();printf("Beginning the Pull\n");
winrt::check_hresult(call->Begin_Pull(100));printf("Doing something else for a while...\n");
Sleep(100);printf("Getting the answer\n");
BYTE buffer[100];
ULONG actual;
winrt::check_hresult(call->Finish_Pull(buffer, &actual));
printf("Pulled %lu bytes\n", actual);return 0;
}
Довольно длинный и техничный пример линча негров. Да еще корпорацией майкрософт под winRT или как там у них это.
Это ж не энерпрайзный, это майкрософтовский c++
Его прочитать может любой человек, осиливший даже не страуструпа а первую попавшуюся двадцатилетней давности брошурку про сисплюсами. И главное - он его еще и применить сможет в аналогичном месте.А вот если ты откроешь исходники мурзилы - те что с++ - вот тут ты и поймешь всю тщетность что либо в них изменить.
> purple-bitchЛюблю этот пакет. Скачивал я его правда не из NPM.
зачем я это гуглил
А что этот пакет делает?
> А что этот пакет делает?ничего, что я не видел бы раньше. только в ужасном прикиде и с энтузиазмом литейщика, отрабатывающего третью смену подряд.
Оригинальный для шалавы способ пиара.
> purple-bitch
> А что этот пакет делает?взламывает процесс размножения
>содержимого переменных окруженияЭто называется телеметрия, здравствуйте. Не самая ужасная, проприетарный софт зачастую грязнее. То, что секреты висят плейнтекстом в переменных окружения, или же процессах, это косяк только этого софта.
Ух ты, помойные коты вонью помоек меряются. Но у тех блохи менее кусачие!!!111
Но ведь у нас телеметрия это не принято. Пока майкрософт не начал делать софт для линукса, телеметрию ещё поискать надо было (в игрушках разве что). В рамках телеметрии сегодня что только не сливают, это мелочи. Вот чужие токены искать на диске и потом их сливать, это явно не ок.
Просто ремарка Майкрософт владеет npm лично.
У вас это школьных фантазеров?> Пока майкрософт не начал делать софт для линукса, телеметрию ещё поискать надо было
в смысле не каждое школ0ло могло найти?
Вот это например - проклятый майкрософт дотянулся?
USER_AGENT="curl/$curl_ver $lsb $platform $cpu $uptime cloud_id/$cloud_id"
А что ты его найти не можешь - так это потому что "у вас" было принято прятать, а если нашли - перепрятывать (это вот - нашли. И перепрятали.) А не как у треклятой M$ - пока не подтвердишь что прочитал и согласен - так и будешь в экран установщика смотреть только.
Не подскажешь, где в юзер агенте какого софта можно посмотреть перечень установленного постороннего софта или серийные номера оборудования? Передавать информацию о версии это не телеметрия.
от того что хорошо сныканный от посторонних глаз слив информации с чужой системы ты двадцать раз назовешь "не телеметрия" оно сливом быть не перестанет.л@п4ые в своем репертуаре. "сливаем, но не все ведь! Только на пол-шишечки! Зато не microsoft!"
тьфу.
P.S. я даже не буду объяснять что оно еще и за тобой следит.
А кто и что там ныкает, если в фидлере всё видно? Нормальные аргументы-то будут?
То, что любая прога имеет доступ в сеть, это косяк ОС.
Если говорить про ОС, то unshare -cn ping 8.8.8.8 -- из минусов, чтобы поднять изолированный петлевой интерфейс необходимый для софта с телеметрией, придётся мапить рута -- unshare -rn whoami.
Никогда такого не было и вот опять!Тем временем, Deno рвёт ноду: https://deno.land/benchmarks
> НикогдаОтродясь
Это еще не факт, нужны независимые источники
Это даже не проплаченый бенч. Это явно накрученный бенч от самого дено.
Я слежу за Дено с версии 1.0 -- и вот тогда он в этом же бенчамарке просасывал, а сейчас уже нет. Сам я, естественно, тестировать это не буду -- но если у тебя есть тесты, доказывающие, что дено врёт, велкам ту шоу.
> kakakaakaaa11aa
> назначением имён, похожих на названия популярных библиотек, с расчётом на то, что пользователь допустит опечатку при наборе имени или не заметит различий, выбирая модуль из списка.Я столько не выпью.
Повышение толерантности к алкоголю - вторая стадия алкоголизма, брат!Чего это ты не можешь выпить всего лишь столько чтоб заснуть носом на клавиатуре? Я бы на твоем месте срочно вызывал доктора.
А 4ая надо полагать: нужду справил, встряхнул, забыл достать?За крайние 2 года выпил 4 раза. Но всякий раз по литру трудный воды. И всю жизнь потреблял в таких обьемах, просто чаще. Тут зависит от того сколько алкогольдегидрогиназы печень вырабатывает.
Выпить надо иногда, но без фанатизму.
> kakakaakaaa11aaКак мимнимум два раза сказано, что это кака.
И ведь все равно качают!
мухи, они такие
Надо создать панк-рок группу с таким названием
Ключевые слова: nmp
ну ладно
> В репозитории NPM выявлено 25 вредоносных пакетовОбычные будни JS-ера :)
Едва ли.Типовой JS-ер накоммитил треш и ушёл развлекаться. Он не может обнаружить.
> Типовой JS-ер накоммитил треш и ушёл развлекаться. Он не может обнаружить.Это заметит его босик после того как его внезапно поимеет топ. И вместо занятий любовью с девочкой JSер будет пару ночей плотно любить свой высер пока не отковыряет это уг. Иначе его заменят на чуть менее тупого, простая в закрытии вакансия.
> Это заметит его босик после того как его внезапно поимеет топ.
> босик
> топАхахаха, это ты в каком таком месте работаешь, что "топ" ищет малварь в твоём сайтике?
Как такое может быть ведь node.js безопасно работает с памятью даже безопаснее чем тот самый язык про который не принято говорить в приличном обществе.
А как это меашет грузить какой-нибудь майнер под видом офигенной плюшки?
Ты не заметил там в комменте был тег иронии.
Ломающие новости: в репах которые содержит стая полоумных хайпопридурков оказывается бывает малварь. Кто бы мог подумать.
В майкрософте любят всяких таких личностей. Результат не заставил себя долго ждать. Лично я сожалею, так как ноду до поглощения считал вполне жизнеспособным продуктом.
Всего?
kakakaakaaa11aa
Под какой популярный пакет мимикрирует эта дичь?
Или тут расчёт что поставят из любопытства?
Это способ такой "фишнуть" смузибоев. Назвать файл bitch-i'm-fabulous, и просто ждать пока они тупо не удержатся пройти мимо.
> распространялись с использованием тайпсквоттинга, т.е. с назначением имён, похожих на названия популярных библиотек
> kakakaakaaa11aaА можно узнать имя соответствующего "правильного" пакета?
Тут один уже purple bitch погуглил. Бойся своих желаний, а то вдруг не только узнаешь имя но и какого ктулху это имя призывает.Я вот предпочитаю не знать. А то вдруг в каком-то из нужных мне проектов ОНО.
Я теперь тоже погуглил. Одного не понял - в каком состоянии должен быть человек, чтобы искать это в npm?
В состоянии JS программинга. )))))
"окошком ошибся". Ой, тьфу... со времен когда код стало модно писать прямо в гитшлаке - достаточно таб перепутать. Хотел подр.. или поблевать, уж не знаю что именно - чуть мышью дернул, и ненароком закомитил.
Ну, может быть, если руки трясутся.
Доколе??? Подскажите на какой язык легче всего переучиваться с js?