- 1
- 2
- 3
- 4
- 5
- 6
CREATE TABLE users(
....
passwd VARCHAR (32) DEFAULT NULL,
passwd_clear VARCHAR (32) DEFAULT NULL,
....
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−164.2
CREATE TABLE users(
....
passwd VARCHAR (32) DEFAULT NULL,
passwd_clear VARCHAR (32) DEFAULT NULL,
....
passwd - типа зашифрованный
passwd_clera - типа в открытом виде ))))
тут всё зависит от алгоритма шифрования, однонаправленный или нет.
кста, еси базу ломанули, то особого труда не составит отослать при входе в систему хеш пасса в обход шифрования.
другое дело, еси принятый пасс шифруется на серваке, но тогда его можно в чистом виде увести в процессе передачи данных.
кароче, юзайте ассиметричное шифрование с открытым ключом, и вам будет щастье!
А восстановление старого пасса (например как вконтакте) - это вообще моветон. Забыл пасс - нажимаешь на сайте специальную кнопочку, тебе генерится ключ, высылается на мыло. С ключем входишь, ставишь себе новый пасс
То его сбрасывают
>тут всё зависит от алгоритма шифрования, однонаправленный или нет.
Боже мой, что за херню вы несёте?
>кста, еси базу ломанули, то особого труда не составит отослать при входе в систему хеш пасса в обход шифрования.
Вы ебанутый?
Клиент шлет пароль, а сервер проверяет его хеш.
> но тогда его можно в чистом виде увести в процессе передачи данных.
Для этого существует TLS
С такой глубиной познаний вам лучше обратно в ноготочки
Повкатывались бляд в айти
Всё так. Я не представляю, куда слать хеш. В phpmyadmin?
Другое дело, если он несолёный, то можно попробовать реверснуть.
Историческая справка про /etc/passwd:
[quote]
Unix acquired a salt in Seventh Edition in 1979.
[/quote]
Каким образом спустя 30 лет это всё еще было комуто не очевидно?
В общем да, несолёный хеш можно обратить... если пароль короткий, содержит common words или если ты обладаешь бесконечными ресурсами. Ресурсов нужно на порядки меньше, чем для обращения солёного, но всё равно может не хватить, если ты не солидная фирма.
Если приспособить к жопе
сопроцессор фирмы «Cray»,
Можно срать в два унитаза
в сорок тысяч раз быстрей.
если дебил поставил пароль 123 (не представляю, зачем так делают) то обратный лукап по несоленому хешу уже есть в Интетнете
ИМХО, не говнокод.
А почему нельзя пробежать циклом по всей табличке, да зашифровать их все?
> В перспективе столбец с открытым паролем планируется удалить
ИМХО его просто забыли удалить (возможно, что в passwd_clear сейчас уже NULL'ы).
Постепенное шифрование может понадобиться, если раньше пароли были с несолёным или слабым хэшем и нужно его поменять на солёный или более сильный.
всё это можно обыграть почтовыми рассылками или плашками на сайте, мол, просим проявить понимание хуё-моё
впрочем, не думаю, что на сайте, где пароли хранили плейнтекстом, что-то в принципе может по чему-то ударить
там можно было перейти по специально сформированной ссылке и обнаружить, что у тебя в описании профиля теперь полная джигурда
ну и отсутствие https
Отправляешь два запроса на восстановление пароля учётки: один на восстановление своей, другой — на восстановление учётки жертвы. Если уложишься в одну секунду, тебе и жертве придёт одинаковый код восстановления. Теперь ты знаешь код, вводишь в учётку жертвы, меняешь пароль.
Лошадиное?
Вы бы выбрали D в качестве языка на следующем проекте?
mixin templates это прямо серебряный пулемёт какой-то
ого, любимый паттерн Ihno
например, можешь нагенерить класс с пропертями и конструктором на основе произвольного количества шаблонных параметров, если они реализуют определённый интерфейс или вообще на основе duck typing
у D есть dub, который одновременно (вроде как) и система сборки, и пакетный менеджер
вот с IDE могут быть проблемы
а какие ещё тулы тебе нужны?
Кто-то должен знать систему сборки - какие флаги поставить для прода, какие для дева, как траблшутить непонятные высеры
Кто-то должен присобачить это к cicd - приготовить контейнеры, настроить точки входа-выхода.
Кто-то должен присобачить эту билд систему к существующей - дописать скрипт, сделать новый таргет для Базеля или что-то такое
Кто-то должен настроить воспроизводимые билды
Кто-то должен присобачить тест раннер. Повторить вышеперечисленные шаги для раннера. Бонусом научиться парить высер раннера и настроить подсчет coverage
>пакетный менеджер
Кто-то должен защищаться от supply chain а так. Кто-то должен обновлять систему сборки и пакеты по мере поступления cve
Кто-то должен задокументировать все что было сделано выше и отвечать на вопросы идиотов и быть готовым чинить если поломается
> Кто-то должен присобачить тест раннер.
то, что ты или я с этим не сталкивались, никак не противоречит
ну и вообще "проставить флаги, дописать скрипт, обновлять" это не какой-то rocket science, если даже жабоскриптизёры справляются
В фб и нетфликсе фраза "мы используем язык" значит что есть команда из 3-30 человек которые фуллтайм занимаются только тулингом под этот язык. В случае больших платформ есть еще и команды которые фуллтайм занимаются движками. Как ТЕБЕ помогает то факт что это решенная проблема в фейсбуке?
> ну и вообще "проставить флаги, дописать скрипт, обновлять" это не какой-то rocket science, если даже жабоскриптизёры справляются
На говнокоде чередуются посты "да хули там подключить язык/тулу/etc" с жалобами на то что билд тормозит, тесты мигают и какая-то хуйня не билдится на винде. Можно подумать что эти вещи как-то связаны, но тут препочитают не думать а гыгыкать над жабоскриптизёрами
В Rust или Go я просто говорю build, и получаю сборку. Говорю test, и запускаются тесты.
Сколько всего нужно поставить и насроить в JS чтобы это всё заработало?
В JS я этого сделать не могу: у меня нету ни сборщика, ни аглификатора, ни дерево мне не потрясти, ни компилятора из TS нету.
Единственное, что есть в npm, но нет в крестах, так это зависимости
к тому же браузеры которые каноничная платформа тоже умеют в ес модули
>удалит из него мертвый код, оптимизирует
V8 в браузере оптимизирует. Удаление мертвого кода - может браузеры в будущем и научатся
Потому что я не хочу распостранять сырцы
> Удаление мертвого кода - может браузеры в будущем и научатся
Ну а компилятор и линкер сей умеют это уже десятки лет.
Я уж не говорю о том, что сишку можно собрать статически, и ни от чего ообще не зависеть. Правда не всегда
– ну так, что вероятно они могут поделиться этим решением. как пример: ссылка ниже на дефинишены для dlang от команды базеля
кстати, базель это пример проблемы, решённой для ТЕБЯ командой в гугле
решения бывают разные, далеко не для всех нужно выделять сертифицированную команду землекопов ;-)
– это у одного питуха траблы и дело там не в языке или тулчейне, а в прокладках между унитазом и раковиной
У нас в некоторых командах есть спецпитух для пирдолинга со системой сборки и CI
Такая проблема действительно есть: чтобы юзать тулу -- нужно потратить время на её изучение. Увы.
Спустя полгода они обнаруживают что надо было учить dub и они теперь половину рабочего времени тратят на починку ломаного билда и дебаг мигающих тестов вместо программирования, выгорают и увольняются
https://github.com/webpack/webpack/discussions/17101
Есть какой-то язык, где знание о тулинге выдают вместе с языком?
Ты предлагаешь D, а буткем сразу думает, как интегировать его в сборку Bazel, потому что в его кругах это де-факто система сборки.
а у j123 в контроллерах нету никакого Bazel, и ему вообще на половину озвученных тут вопросов может быть похуй
https://github.com/bazelbuild/rules_d
"Хипстерское говно" как-то не очень развёрнуто звучит
Иногда они слишком строги, и тогда нужно писать unsafe.
Это, в общем, не сложно, но и не часто нужно.
Сишка тоже не позволяет тебе выразить некоторые вещи: к примеру, как я могу вызвать функцию с левым колконвеншеном, где параметр нужно сувать в регистр, а другой -- в стек?
> xor linked list
В расте даже нельзя сделать структуру часть которой ссылается на другую часть, потому что в расте есть только референсы. А поинтеры там только unsafe.
В Watcom C можно даже такую ересь описать прагмой. Даже переходник на асме писать не придётся, как в случае других компиляторов.
Жаль, в стандарте такой возможности нету.
А если мне эти правила ownership с рефкаунтерами и прочей питушней в каком-нибудь условном контроллере вообще нахер не нужны, и я управляю ресурсами в некоем условном контроллере каким-то своим способом, о котором Rust нихуя не знает? Мне весь код в unsafe писать? Тогда чем это лучше Си?
Если вообще у тебя нету операционки и аллокатора, а есть только шмат памяти, которую ты просто сам заполняешь и сам за ней следишь, то раст тебе не нужен.
А зачем тебе D?
Там есть mixin и через них можно что-нибудь наметушить, генерить какое-то говно в компилтайме. А еще там есть шаблоны и шаблонные миксины.
А для обычных случаев D (better-c) ничем не хуже C
А почему нельзя сделать новый хорший препроцессор для сей?
Вообще, все япы кроме си, си пипи и обжси сосут по причине несоместимости с сишкой. Это значит, что API операционок нужно обмазывать каким-то ненужным говном. Почему не сделать нормальный язык, но совместимый с сии?
во-вторых, ffi
в-третьих,
https://dlang.org/spec/interfaceToC.html
https://developer.apple.com/documentation/swift/using-imported-c-functions-in-swift
>Here’s how Swift imports them:
Тоесть там не нужна специальна мартышечка которая аккуратно перепишет сигнатуры с одного ЯПа на другой?
http://www.delphikingdom.com/library/library.asp?ID=12
Программирование дисковых подсистем (с дискетой)
зы: всё таки раньше у людей было больше времени
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=855
И кстати это даже симпатичнее, чем писать его на JS/VBS
Начинала с Паскаля. Потом пришлось писать на С++.
Уйдя из института писала на FoxPro.
Сейчас Delphi , Ms SQL.
Личная просьба:
Пожалуйста, НЕ ЗАДАВАЙТЕ мне вопросы по программированию в личной почте... Я все равно не буду на них отвечать.
Поймите правильно, на это у меня физически не хватает времени.
В радуги волшебный свет.
Всё у девки впереди,
Девке 55 лет.
в королевстве дельфи
да
А ты знаешь группу "удивление"?
http://www.shushara.ru/albums.php
сука как можно такого эффекта добиться?
а что, амперсанд двадцать лет назад был валидным?
Например, некоторые питухи тащут Жуквери с CDN, указывая вместо кокококонкретной версии /latest. В итоге одним прекрасным днём или ночью в CDN Жуквери обновится, а в нём обратно несовместимые изменения, и весь фронтенд распидорасит. Особенно красиво, если это SPA, тогда клиенты вместо кокококонтента увидят хуй.
в идеале оно вообще должно быть на каком-нибудь нексусе, чтобы лефтпад не случился
OpenSSH при каждом запуске скачивал бы свой libssh.so прямо найтли билд с левых серверов
http://www.delphikingdom.com/asp/userlist.asp
Until and including PHP 4.3, it was possible to send, assign or return variables by reference that should really be returned by value, such as a constant, a temporary value (e.g. the result of an expression), or the result of a function that had itself been returned by value, as here:
В PHP 4.4 уже нельзя писать & перед вызовом функции, т. е. ссылаться на безымянный результат уже нельзя.
Для истории: PHP 5.0 вышел в 2004-м году.
А помнишь, ради PHP3 было специальное расширение .php3? В эпоху, когда mod_rewrite ещё не вошёл в моду, можно было в URL наблюдать питушню вроде index.php3.
https://forum.ixbt.com/topic.cgi?id=24:017554
Но вообще когда я познакомился с вебразработкой под уникс, там везде был Perl, CGI, и SSI, и конечно целая пачка модулей под Apache.
Апач был чуть ли не первый серьезный сервер, с которым я столкнулся, и конечно мир был полон удивительных открытий
ебать какое
https://samag.ru/archive/article/1196
аа! чат диван!
Суперхацкиллер
https://habr.com/ru/users/superhackkiller1997/
Царь разъёбует джавушка
https://habr.com/ru/articles/338084/comments/#comment_10420608
Царь доказывает, что асинхронность не нужна, потому что можно насрать 10000 потоков, и потечь. Он и на ГК это говорил.
Царь доказывает, что писать 100000 это заебись, потому что программист должен быть внимательным.
Наконец царь говорит, что никакой ДЖЫТ в джаве не заменит прокладку между сидением и монитором и потому джавалалки всегда будут сосать
слава богу, что он срёт там, а не тут
Но там и кроме него говна хватает. Знаешь, как происходит линковка? Вот ты в коде заимпортил класс и вызвал метод. Класслоадер загрузит (с диска!) класс, составит таблицу его методов и дернет их. И это всё происходит в рантайме. Это позволяет не пересобирать при добавлении метода и поля правда, но это же не бесплатно.
А проверка типов в рантайме обязательная? А границы массива всякие? А боксинг при обобщенном программировании?
Когда они все загрузятся, а самые горячие места заJITятся, а долгие объекты переедут на небо и исключатся из минорных GC, вот тогда говорят "джава машина прогрелась".
Так что AOT тут не оч поможет
Это мелочь по сравнению с остальной нагрузкой. Есть же gcc -fbounds-checking для сишки, есть язык Ада, есть Object Pascal, есть D.
Проверка границ позволяет не хватать CVE «выполнение произвольного кода при переполнении буфера».
https://github.com/Shnatsel/bounds-check-cookbook/
На самом деле представь себе такой код на вымышленном языке
Если компилятор тупан, и не осилит доказать, что петушков меньше миллиона, то будет довольно дохуя лишних действий делаться
Во Фрипаскале и в Дельфи можно даже отключить локально, только в горячих местах.
С одной стороны нахуя проверять ненужное, с другой наверное миллион или около того багов связаны с тем, что питух ошибся на единичку. Причем иногда сишник с десятью годами опыта всё равно обсирается на единичку где-то.
https://govnokod.ru/27648#comment669198
Препод рекомендует выделять под массив на пару-тройку элементов больше, чем нужно, чтобы если программист лоханётся с условием завершения цикла, программа не упала.
Всё так.
То-есть безусловно я не буду никогда писать код с UB только потому, что на моей материнской плате он чуть быстрее кода без UB, но царёвы нахрюки на лалок мне импонируют.
Меня тоже безмерно заеабали миф и легенды про то, как анскиллявый питух на джаваскрипте напишет левой ногой хуиту, а потом придет мудрый JIT, и оптимиизрует этот код так, словно его Кармак писал.
Не было такого, и не будет никогда
https://i.postimg.cc/SKR2mpwH/image.png
она может понадобиться, если ты хочешь при помощи специальных мокросов получить из сишных структур модные свифтовые классы с методами, но это необязательно
https://dlang.org/spec/objc_interface.html
А почему про D мало говорят?
Но с objc смешно: в одном есть arc, в другом gc, но вместе извольте руками release звать
хм.. Я не могу не доверять Александрску, но звучит необычно
А как же j123 хотел его в контролер завести?
Или горбатый дворник там опционален?
В режиме «better C» нельзя использовать какие-то встроенные классы, потому что их рантайм использует горбатого дворника.
j123 говорил, что в "D" ему нравится метапрограммирование. Чем better C еще better than C я не знаю.
Кстати, а почему better C не Objc? OBjc полностью совместим с сишкой, вот просто бери, и теки.
А поверх этого обычное ООП
The executable size is 23,068 bytes.
Translate it to D:
The executable size is the same, 23,068 bytes. This is unsurprising because the C compiler and D compiler generate the same code, as they share the same code generator. (The equivalent full D program would clock in at 194Kb.)
лол кек
Впрочем, в соверменно мире сто метров -- норм размер бинаря
доказано Go
если ты про сижную программу, то не знаю
– ObjC это ужасный язык, плюсы совместимости с сявкой полностью перекрываются его чудовищностью
Синтаксис необычный? Плюшек маловато? Вербозность?
1. вербозный
2. message dispatch, который, во-первых, тормоз, во-вторых, позволяет себе выстрелить в колени и копчик при помощи всяких forwardInvocation (ок, этим никто не пользуется, но всё равно)
3. отсутствие перегрузки методов в связке с нестрогой типизацией даёт пространство для креатива, на фоне которого php это венец изящества
4. отстутствующие фичи, которые лечатся костылями (эмуляция private пропертей и методов при помощи категорий)
5. nssomeclass и nsmutablesomeclass в стандартной блевотеке, потому что для let и var пришлось ждать другую цивилизацию
6. блоки с кривым синтаксисом и пачкой нюансов, которые нужно держать в голове
7. кастрированные женерики, придуманные чисто для хоть какой-то совместимости со швифтом
7а. по той же исторической причине ТИПА гетерогенные коллекции
8. тяжеленные нативные исключения, которыми за пределами стандартной либы никто не пользуется
9. сишный код красиво переплетается с обжективом, я не знаю, это эклектика или синкретизм, есть в чате фотографы?
10. разделение на хедеры и собственно сорцы
ой устал уже
обсерватории
https://dlang.org/spec/betterc.html
D features not available with BetterC:
• Garbage Collection
• TypeInfo and ModuleInfo
• Classes
• Built-in threading (e.g. core.thread)
• Dynamic arrays (though slices of static arrays and pointers work)
• Associative arrays
• Exceptions
• synchronized and core.sync
• Static module constructors or destructors
**********
Nearly the full language remains available. Highlights include:
•Unrestricted use of compile-time features
• Full metaprogramming facilities
• Nested functions, nested structs, delegates and lambdas
• Member functions, constructors, destructors, operating overloading, etc.
• The full module system
• Array slicing, and array bounds checking
• RAII (yes, it can work without exceptions)
• scope(exit)
• Memory safety protections
• Interfacing to C++
• COM classes and C++ classes
• assert failures are directed to the C runtime library
• switch with strings
• final switch
• unittest
• printf format validation
https://web.archive.org/web/20120908041550/3d.benjamin-thaut.de/?p=20
Чувак переписал рантайм (libphobos), чтобы деаллоцировать объекты вручную.
Ещё мысли на эту тему здеся:
https://stackoverflow.com/questions/13574552/d-programming-without-the-garbage-collector
можешь свой gc прикрутить, хе-хе
Я ловил багры от Windows SDK, потому что результат компиляции зависел от порядка #include: макросы из одного хедера конфликтовали с другими хедерами.
Если бы там всё без макросни было... А так это говно лучше сжечь напалмом и начисто переписать по документации.
API операционок, UEFI и большиства серьезных lib/SDK описываются в терминах си.
Крестопараша с Си уже не имеет полной совместимости по хедерам т.к. можно написать хедер, который корректный для Си, но некорректный для крестов.
> Почему не сделать нормальный язык, но совместимый с сии?
Потому что для совместимости с Си надо тащить в язык херню с инклудами и препроцессором, а херня с инклудами и препроцессором это мягко говоря не очень удачный подход (нужно ли это доказывать?). Тащить совместимость с говном это хуевая стратегия в долгосрочной перспективе, да и в целом совместимость с говном означает что и твой язык тоже отчасти говно
да, но только неряшливый хедер. Большинство хедеров SDK и API операционок работают в C++.
Хотя в Windows.h стопудово есть провека на С++ (за прыщи не скажу)
для прототипов функций.
??
Или же они распостраняются с компилятором, а ядро лишь предоставляет ABI?
"Linux" предоставляет `.h` файлы только для разработчиков кода, работающего в ядре. Такой код не обязан быть совместимым с `C++`.
Код для пользовательского режима пишется с использованием заголовков из пакета компилятора (обычно это пакет `GCC`) и потому вопрос смысла не имеет.
> Самая фундаментальная проблема заключается в том, что borrow checker вынуждает выполнять рефакторинг в самые неудобные моменты. Разработчики на Rust считают это положительным моментом, потому что это заставляет их «писать хороший код», но чем больше я работаю с языком, тем сильнее сомневаюсь, что это так. Хороший код пишется благодаря итеративной работе с идеями и экспериментам, и хотя borrow checker может заставить увеличить количество итераций, это не означает, что таков желательный способ написания кода. Часто я обнаруживал, что именно невозможность просто пойти дальше, решить свою задачу, а проблему устранить позже, мешает писать хороший код.
Какой багор )))
Собака лает.
Караван идёт.
Наркоманы жрут говно.
Ну понятно, что ProtoBuf более всего делал `memcpy`, и потому оказался чуть медленее, но зато его представление не выровнено, и потому компактнее.
Но скорости все равно получились такие шустрые, что если ты не шлеш по два миллиона структур в секунду, то в общем разницы между всеми тремя решениями ты не заметишь.
Разница типа 70ms vs 160ms на миллион питухов
Average Wages in Moldova increased to 12176 MDL/Month (676.862 USD/Month)
https://emacs.ch/@a13cui/111046238207230058
Питух, ООпаттерны для интерпрайзного жаюаёба на галере, а не для AAA
https://habr.com/ru/articles/760184/