- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
// https://habr.com/ru/company/oleg-bunin/blog/493242/
// Алгоритмы быстрой обработки HTTP-строк
// .....
// Как устроен парсер? Мы, как nginx, определяем массив байт и по нему
// проверяем входные данные — это пролог функции. Здесь мы работаем
// только с короткими сроками, используем likely, потому что branch misprediction
// для коротких строк болезненнее, чем для длинных. Выносим этот код наверх.
// У нас есть ограничение в 4 из-за последней строчки — мы должны написать
// достаточно мощное условие. Если будем обрабатывать больше 4 байт, то условие
// будет тяжелее, а код медленнее.
static const unsigned char uri_a[] __attribute__((aligned(64))) = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
...
// Branch misprediction is more crucial for short strings
if (likely(len <= 4)) {
switch (len) {
case 0:
return 0;
case 4:
c3 = uri_a[s[3]];
// fall through to process other chars
case 3:
c2 = uri_a[s[2]];
case 2:
c1 = uri_a[s[1]];
case 1:
c0 = uri_a[s[0]];
}
return (c0 & c1) == 0 ? c0 : 2 + (c2 ? c2 + c3 : 0);
}
// Основная петля и большой хвост. В основном цикле обработки мы делим
// данные: если они достаточно длинные, обрабатываем по 128, 64, 32 или
// по 16 байт. Имеет смысл обрабатывать по 128: мы параллельно используем
// несколько каналов процессора (несколько pipeline) и суперскалярность процессора.
for ( ; unlikely(s + 128 <= end); s += 128) {
n = match_symbols_mask128_c(__C.URI_BM, s);
if (n < 128)
return s - (unsigned char *)str + n;
}
if (unlikely(s + 64 <= end)) {
n = match_symbols_mask64_c(__C.URI_BM, s);
if (n < 64)
return s - (unsigned char *)str + n;
s += 64;
}
if (unlikely(s + 32 <= end)) {
n = match_symbols_mask32_c(__C.URI_BM, s);
if (n < 32)
return s - (unsigned char *)str + n;
s += 32;
}
if (unlikely(s + 16 <= end)) {
n = match_symbols_mask16_c(__C.URI_BM128, s);
if (n < 16)
return s - (unsigned char *)str + n;
s += 16;
}
... пиздец. Там еще в той статье пишут, что CloudFlare через AVX2 какое-то говно оптимизируют в говнопаринге http запросов.
Поэтому я за бинарную сериализацию, без всей этой хуйни человекочитаемой
j123123 # 0
... вообще, вспоминается еще вот эта параша https://govnokod.ru/24338 - там тоже какая-то такая поебень
Или вот https://govnokod.ru/19842 там вконтактовские олимпиадники свою питушню на длину проверяют, и только потом сравнивают
или вот
Это лишь тупые анскиллябры опускаются до макросов, а Доктора Наук умеют сами считать размер строк
3.14159265 # 0 ⇈
Детали не помню, они жали хедеры, но злоумышленник мог слать хитрые запросы, угадывать какие хедеры в ответе и какой контект архиватора и через это как-то сильно упрощалось дешифровка SSL.
Вообще все эти SPDY и HTTP/2 с их словарным зожатием зоголовков, по сути откат к бинарным протоколам.
Царь мудр. А птушники колются, но продолжают дрочить на текстовую питушню.
bormand # 0 ⇈
Если SSL TLS не похуй на контент и при каких-то данных он становится слабее - то это всё-таки TLS хуёво спроектирован, а не прикладной протокол, который поверх него гоняют.
bormand # 0 ⇈
Как в таких ебанутых условиях вообще удаётся сделать что-то малость безопасное - х.з.
gost # 0 ⇈
В коммерции, кстати, используется такая же хуйня, но в более извращённых и тёмных формах, см. «pixel tag».
KOPOHABuPYC # 0 ⇈
Ко-кок, ко-кок.
3.14159265 # 0 ⇈
Просто сначала анскилябры сделали HTTP текстовым протоколом.
Время шло, траффик рос, все стали видеть реальный пирформанс и осознавать масштабы факапа.
Тогда отбросы стали прикручивать к протоколам зожатие и на каждом углу орать, как это круто.
По сути вернувшись к бинарным протоколам.
И что в итоге вышло? Всё что было заявлено — со всем обосрались.
Кукарекали, что-то про читабельность текста — обосрались и начали архивировать.
Кукарекали, что бинарь не нужен, а сами сделали уязвимый бинарь.
guest # 0 ⇈
есть же заголовок, запрещающий с этого сайта слать запросы
bormand # 0 ⇈
guest # 0 ⇈
bormand # 0 ⇈
Но обычный "безобидный" GET или POST вполне доходит до сервера. Чего в общем-то и было достаточно для обсуждаемых здесь атак.
guest # 0 ⇈
bormand # 0 ⇈
Сходи, проверь уже. Даже ваершарк запускать не надо, браузерной сосноли будет достаточно. Кинь кросс-доменный запрос с какого-нибудь ГК на какое-нибудь ВК и убедись, что браузер и сервер этот запрос обработали, а твоему скрипту просто ответ не отдали.
З.Ы. Ну что, фаза отрицания пройдена? 🙂
guest # 0 ⇈
Разумеется, ничего никуда браузер не кидает
bormand # 0 ⇈
guest # 0 ⇈
https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP
guest # 0 ⇈
guest # 0 ⇈
bormand # 0 ⇈
При этом злоумышленник на его домене вправе разрешить его скриптам ходить на твой домен. Браузер даже куки будет отправлять. Чего вполне достаточно для рассматриваемых в данном треде атак. А то что его скрипт ответ не получит - всем похуй.
guest # 0 ⇈
причм тут HTTP?
bormand # 0 ⇈
Если злоумышленник хочет отправлять запросы от имени своего домена куда угодно, то CSP ему никак не помешает.
guest # 0 ⇈
где?
Как я могу вставить пиксель с урлом на мой сайт на чужом форуме при csp?
>запросы от имени своего домена
эмм
ну да.
Я могу что угодно на своем сайте делать.
А еще я могу что угодно слать от своего IP. Это проблема?
gost # 0 ⇈
guest # 0 ⇈
bormand # 0 ⇈
При этом ты, как админ сайта, вообще ничего не можешь сделать. Разве что отрубить HTTP/2.
guest # 0 ⇈
bormand # 0 ⇈
Ты в кафешках, метро и т.п. вайфаем пользуешься?
guest # 0 ⇈
или злоумышленник это админ роутера? если админ, то почему бы ему просто не открывать vk.com в качестве портала?
gost # 0 ⇈
guest # 0 ⇈
роутер сломает?
gost # 0 ⇈
guest # 0 ⇈
и если сломает, то зачем такие сложности как http2, почему просто не открыть vk.com?
gost # 0 ⇈
Задача — спиздить куки пользователя от сайта vk.com. «vk.com» открывается только по «https».
3.14159265 # 0 ⇈
Браузер идёт запросом в вк, злоумышленник снифает куки.
guest # 0 ⇈
как? я админ сайта example.org, что я должен сделать, чтобы спиздить куки с ВК?
bormand # 0 ⇈
2) Уговорить юзера зайти на твой сайт (это очень просто т.к. бесплатный вайфай обычно открывает страничку приветствия)
3) Кидать специально сформированные запросы на ВК
4) Смотреть на их длину в трафике
5) Профит
Но, конечно, это всё уже заткнули кривыми костылями в духе принудительной фрагментации. Поэтому в такой простой форме оно уже не работает.
guest # 0 ⇈
gost # 0 ⇈
guest # 0 ⇈
В чем отличие?
Еще раз: в чем отличие между запросом через JS и просто открытием браузера?
bormand # 0 ⇈
gost # 0 ⇈
>>> It relies on the attacker being able to observe the size of the ciphertext sent by the browser while at the same time inducing the browser to make multiple carefully crafted web connections to the target site. The attacker then observes the change in size of the compressed request payload, which contains both the secret cookie that is sent by the browser only to the target site, and variable content created by the attacker, as the variable content is altered. When the size of the compressed content is reduced, it can be inferred that it is probable that some part of the injected content matches some part of the source, which includes the secret content that the attacker desires to discover.
guest # 0 ⇈
gost # 0 ⇈
guest # 0 ⇈
нет?
gost # 0 ⇈
guest # 0 ⇈
gost # 0 ⇈
guest # 0 ⇈
Он зашел на https, впервые. Почему браузер решил, что ему ответил реальный pethu-bank.ru, а не подставной?
gost # 0 ⇈
bormand # 0 ⇈
1) пруф владения сертом сервера в данный момент
2) цепочку подписанных сертов от серверного до корневого
guest # 0 ⇈
guest # 0 ⇈
серт CA вшит в браузер
gost # 0 ⇈
Это — забота того центра сертификации, у которого ты купил (получил) серт.
> и только его?
А для этого ты должен верить джентльменам, которые выпускают сертификаты, на слово.
guest # 0 ⇈
Вот и дырень. Омериканские спецслужбы могут захватить какой-нибудь омерианский сертификационный центор, и сгенерить кучку сертификатов себе? И это никогда никто не раздебажит.
guest # 0 ⇈
guest # 0 ⇈
а то, что какой-то сертификат ещё подошел, обычный пользователь никогда не заметит
guest # 0 ⇈
Они конечно могут подсунуть его только одному человеку из Ирана
ну так и интел с эпплом или мсом это может сделать с одним человеком
gost # 0 ⇈
Таким образом, если спецслужбы сгенерируют себе кучу сертификатов, то либо они (сертификаты) не будут работать, либо их придётся загрузить в публичный лог, о чём сразу же узнают недовольные владельца сайтов.
guest # 0 ⇈
gost # 0 ⇈
guest # 0 ⇈
gost # 0 ⇈
https://www.certificate-transparency.org/what-is-ct
bormand # 0 ⇈
Какое доверие )))
gost # 0 ⇈
guest # 0 ⇈
Лог Сервер? Он типа готов к миллиарду запросов в минуту?
gost # 0 ⇈
https://www.certificate-transparency.org/log-proofs-work
guest # 0 ⇈
На одном сраном TCP можно охуеть
Инфраструктурка нужна уровня корневых DNS серверов для всего этого, не?
gost # 0 ⇈
Ну и «CT» — это инициатива «Гугла», они себе могут позволить десяток корневых DNS запустить и не особо просесть по баблу.
guest # 0 ⇈
gost # 0 ⇈
guest # 0 ⇈
оъуеть
guest # 0 ⇈
gost # 0 ⇈
guest # 0 ⇈
а как я могу знать, что я говорю с доверенным сервером? Что мешает врагу по дороге спуфнуть IP?
bormand # 0 ⇈
guest # 0 ⇈
ты не слышишь?
gost # 0 ⇈
Поэтому вся криптоархитектура современного веба строится на том, что для успешного взлома системы (получения доверенного сертификата на чужой домен) тебе придётся взламывать много разных сервисов.
guest # 0 ⇈
gost # 0 ⇈
*Поле есть, но по факту в проверке доверия оно не участвует.
guest # 0 ⇈
размести CA в США, Европе, КНР и России. требуй 4х подписей
guest # 0 ⇈
guest # 0 ⇈
* разрешаю не доверять пиндосам
* разрешаю не доверять гейропке
* разрешаю не доверять рус-не
* разрешаю не доверять китаезам
guest # 0 ⇈
Скорее доверять n из m.
gost # 0 ⇈
> размести CA в США, Европе, КНР и России. требуй 4х подписей
Это чрезвычайно сильно усложнит процедуру получения сертификата и увеличит вероятность отказа. К тому же, текущая система доверия просто не рассчитана на такое: в ней существует отдельных «сертификатов CA», в ней есть только подписанные и самоподписанные сертификаты. Более того, у CA обычно есть несколько (меняющихся) сертификатов, связанных в цепочку, и сертификаты клиента подписываются самой нижней «частью». Например: https://letsencrypt.org/certificates/.
guest # 0 ⇈
Теперь вопрос: что мешает сделать расширение (коих в сертификате уже и так несколько) и хранить там подпись от разных CA?
gost # 0 ⇈
guest # 0 ⇈
Но цепочка же прослеживается. Что мешает пользователю оттрекать все четыре цепочки до четырех корневых самоподписанных?
gost # 0 ⇈
guest # 0 ⇈
зы: даже в книжке про PKI в доменной винде рекомендовалось корневой CA держать выключенным, а выдать другим (более мелким питухам) право выдавать серты.
Причем корню давали длинющий ключ и пять-семь лет сроку
gost # 0 ⇈
> даже в книжке про PKI в доменной винде рекомендовалось корневой CA держать выключенным, а выдать другим (более мелким питухам) право выдавать серты.
Ну да, всё правильно. Корневые HTTPS-сертификаты держат за семью замками в камере из вибраниума и достают только по очень-очень большим праздникам.
gost # 0 ⇈
Если у нас есть только один CA на страну, то вместе с его отключением выключится и интернет. Если CA много, но надо подписи из разных стран, то нужно в сертификаты вводить, собственно, информацию о «гражданстве» CA — а это огромный геморрой. Плюс возникают политические проблемы. Плюс ничего не мешает хакерам из ФСБ взломать четыре CA из Зимбабве, Нигерии, Либерии и Лимпопо, после чего спокойно штамповать серты для google.com.
MAKAKA # 0 ⇈
угу. Приватный ключ самого корневого CA хранится вообще под семью замками, и ради питухов его не достают.
>что в таком случае помешает ФСБ взять четыре CA в России,
Я предлагаю требовать подпись минимум четырех CA из разных стран
Без Лимпопо и Уганды. А чтобы взломать и ФСБ и ЦРУ надо быть очень крутым
gost # 0 ⇈
>> Плюс возникают политические проблемы.
> требовать подпись минимум четырех CA
Опять же, в системе доверия просто нет никаких «CA», есть только сертификаты. Нельзя достоверно определить, что два сертификата были выпущены разными CA.
> А чтобы взломать и ФСБ и ЦРУ надо быть очень крутым
Не нужно взламывать ФСБ и ЦРУ, достаточно послать четырёх людей в штатском, которые занесут по чемодану бабла четырём условным директорам CA.
MAKAKA # 0 ⇈
Инстансов корневых DNS тоже нет в лимпопо, это создает проблемы? Ну посадите один в африке в ЮАР, там же шафт уже есть.
>Нельзя достоверно определить, что два сертификата были выпущены разными CA.
Чтобы проверить сертификат, мне нужно пороверить его подпись. Чтобы проверить подпись, мне нужно знать публичный ключ подписавшего его товарища. Публичный ключ я беру из корневого самодподписанного серта.
Разные серты -- разные ключи.
Разумеется, ничто не мешает мне самоподписать чужой серт, но его же тогда в ОС и либы не вбандлят.
>которые занесут по чемодану бабла четырём условным директорам CA.
Тогда сейчас еще хуже: достаточно одного чемодана в LetsEncrypt, нет?
gost # 0 ⇈
Они не решают проблему доверия, поэтому это не столь важно. К тому же, реплику корневого DNS вполне можно разместить хоть в Лимпопо, хоть в Зимбабве — никаких проблем это не создаёт.
> Публичный ключ я беру из корневого самодподписанного серта.
> Разные серты -- разные ключи.
>>> Корневых сертификатов очень мало, их просто не хватит на все CA.
> Тогда сейчас еще хуже: достаточно одного чемодана в LetsEncrypt, нет?
Именно. Для решения (не полного, разумеется, полностью решить проблему доверия нельзя) этой проблемы и придумали «Certificate Transparency». Если ты занесёшь чемодан в «LE», то они тебе смогут выпустить только сертификат, не записанный в публичный лог, потому что иначе их мгновенно выебут, высушат и все сертификаты отзовут. А сертификату, не записанному в публичный лог, браузер доверять не будет (сейчас — с «expect-ct», потом вроде как вообще планируется сделать такое поведение дефолтным). Обойти это можно только для точечных атак на одного пользователя, занеся по чемодану бабла владельцам публичных логов и заставив их отдавать фиктивный ответ только одному айпишнику. При этом вероятность провала увеличивается, потому что если кто-то заметит фиктивные ответы от лога — лог тоже выебут и высушат.
MAKAKA # 0 ⇈
Есть Корневой CA. Он сам себя подписал (как языческий бог сам себя родил). Его приватный ключ хранится в подвале ООН, охраняемый солдатами (по четыре от каждой страны).
Раз в год он выдает Сертификаты четырем странам в ЕС, США, РФ и в КНР.
Все четыре страны обязаны подписать сертификат govnokod.ru.
В браузер вшит только Корневой (из подвала ООН). Остальные он валидирует.
gost # 0 ⇈
Во-вторых, если ты на своём сайте разместишь картинку с Винни Пухом, то КНР обидится и откажется подписывать твой сертификат — и всё, не будет у тебя «HTTPS».
В-третьих, если в США негры разъебут местный CA, то выдача сертификатов прекратится во всём мире — то есть у нас даже не единая точка отказа, у нас их аж четыре, причём отказ каждой из них отключает всю систему.
В-четвёртых, в такой системе достаточно спиздить корневой сертификат — и можно подписывать что угодно. «CT», в свою очередь, эффективно защищает даже от кражи корня.
Нет, я не спорю, что это весьма эффективная стратегия для валидации каких-то критически важных мировых ресурсов, но в качестве глобальной системы доверия для HTTPS её преимущества сильно перевешиваются минусами.
MAKAKA # 0 ⇈
А валидация логов усложняет использование сертификата. Это как OCSP, только плюс еще одно действие. нет?
>Во-вторых, если ты на своём сайте разместишь картинку с Винни Пухом, то КНР обидится
А лецэнкрипт не обидится? А шафт? А верисайн?
А если я УсамаБинЛанден младший, и делаю сайт про 9/11, то американцы мне дадут сертификат?
>причём отказ каждой из них отключает всю систему.
Предлагаю всё равно выдавать серты, но писать рядом сними кто их подтвердил
Пользовтаель пусть сам решает кому он доверяет в зависимост от своих политическх предпочтений
>в такой системе достаточно спиздить корневой сертификат
Из подвала ООН?
>«CT», в свою очередь, эффективно защищает даже от кражи корня.
Но не защищает от 51% кажется что.
Достаточно завладеть всеми серверами логов, и можно вертеть всех на хую.
gost # 0 ⇈
Это один запрос, который ты можешь закэшировать навечно. Лишние 100 миллисекунд на первое открытие сайта — не такая уж страшная цена.
> А лецэнкрипт не обидится? А шафт? А верисайн?
> А если я УсамаБинЛанден младший, и делаю сайт про 9/11, то американцы мне дадут сертификат?
Обидится «Let's Encrypt» — ты спокойно сможешь пойти к «VeriSign». Обидится «VeriSign» — пойдёшь к «Namecheap». Обидится любой американский CA — купишь сертификат у «Reg.ru». ФСБ потребуют ключи — переедешь в австралийский «ssltrust.com.au». В этом и суть.
> Пользовтаель пусть сам решает кому он доверяет в зависимост от своих политическх предпочтений
Ну а в чём тогда смысл всей системы, если обеспечение безопасности всё равно в конце-концов перекладывается на пользователя?
Вообще, считать, что среднестатистический пользователь хоть чуть-чуть разбирается во всех этих ваших сертификатах и цепочках доверия — это огромная ошибка, так делать не нужно.
> Из подвала ООН?
Совершенно неважно, откуда.
> Но не защищает от 51% кажется что.
Нет, там, ЕМНИП, каждый лог независим.
> Достаточно завладеть всеми серверами логов, и можно вертеть всех на хую.
Целостность данных в логах постоянно проверяется независимыми аудиторами. Если что-то идёт не так — бьётся тревога, и все скомпрометированные логи ебут и сушат.
guest # 0 ⇈
Все серты всех сайтов??
половина логов говорит одно, половина -- другое
твои действия?
gost # 0 ⇈
Ну ладно, не вечно, на год будем кэшировать, благо сертификаты в общем и целом примерно через столько и протухают.
Предположим, что за год пользователь посещает миллион сайтов, каждый из которых за это время сменяет по пять сертификатов. Тогда в кэше у пользователя окажется (мы параноики и используем 64-батный хэш) 5*64*1000000/(1024*1024) = 305.17578125 мегабат данных. Не выглядит страшной потерей места. Конечно, в реальности доменов будет ещё меньше: у меня, например, за последний год в истории значится 4540 доменов.
> половина логов говорит одно, половина -- другое
> твои действия?
Единственный лог, говорящий об отсутствии в нём соответствующего сертификата — повод для провала валидации. Если я замечаю, что два разных лога дают разные ответы — я пишу в Спортлото операторам логов, после чего скомпрометированные логи ебут и сушат.
Вообще, вся эта инфа есть у них на сайте:
https://www.certificate-transparency.org/log-proofs-work
https://www.certificate-transparency.org/getting-started#TOC-Verifying-SCTs
UPD: ну и я несколько неточен, запросы к логам слать не обязательно, достаточно проверить, что у сертификата есть reasonable number of SCTs with valid signatures. «SCT» — это такой штампик, удостоверяющий, что соответствующий лог поместил в себя соответствующий сертификат.
guest # 0 ⇈
Зачем читать и думать, когда можно легко получить нужную информацию от тебя?
Если на пальме висит банан, а другой банан лежит в тарелке, то какой банан выберет макака?
guest # 0 ⇈
3.14159265 # 0 ⇈
Логика сёмы.
Ему все всё должны разжевать в рот положить.
И если вдруг комп выкинут нерабочий, он обязательно на это пожалуется.
gost # 0 ⇈
https://www.certificate-transparency.org/known-logs
MATEMATuK_u3_PAIIIKu # 0 ⇈
guest # 0 ⇈
gost # 0 ⇈
KOPOHABuPYC # 0 ⇈
guest # 0 ⇈
// другой гость
gost # 0 ⇈
guest # 0 ⇈
guest # 0 ⇈
Secure cookie
bormand # 0 ⇈
Вся фишка же в них.
guest # 0 ⇈
То-есть чтобы сломать что-то, нужно выполнить указанные тобой пять пунктов.
Если я просто админ сайта, то сломать я ничего не могу: надо людей с вайфаем подключать
gost # 0 ⇈
guest # 0 ⇈
дыра, я не спорю
bormand # 0 ⇈
Поднять свою же. Отличить нормальную точку от поддельной в том же метро невозможно. Именно поэтому я никогда не юзаю бесплатный вайфай без VPN.
Да там и более очевидные дыры есть... Про скан твоей локалки из браузера с помощью DNS злоумышленника, к примеру. И это 10 лет никто не фиксил и вроде даже не собирается.
Повторюсь - корень зла именно в том, что браузер позволяет кому угодно кидать запросы куда угодно.
gost # 0 ⇈
guest # 0 ⇈
http://bank.ru?petuh=krestuh
это не будет тоже самое?
bormand # 0 ⇈
gost # 0 ⇈
bormand # 0 ⇈
reload=5 или как там в хедерах.
gost # 0 ⇈
3.14159265 # 0 ⇈
А юзеру не похер какой тебе софт показывает контент: бинарный или текстовый.
Никто же не читает сырые запросы. Максимум что делают руками: шлют курлом. Но и его тоже можно пропатчить и слать бинарники.
guest # 0 ⇈
bormand # 0 ⇈
guest # 0 ⇈
bormand # 0 ⇈
guest # 0 ⇈
gost # 0 ⇈
Но да, это работает только в случае хорошего владельца сайта и плохих пользователей.
bormand # 0 ⇈
gost # 0 ⇈
nemyx # 0 ⇈
guest # 0 ⇈
nemyx # 0 ⇈
2. Классика CSRF: кроссдоменный AJAX по умолчанию запрещён, но никто не мешает вставить URL запроса в элемент <img> или <script>.
guest # 0 ⇈
Никакой запрос не пойдет
Koko # 0 ⇈
guest # 0 ⇈
Koko # 0 ⇈
> запрос не пойдёт
?
guest # 0 ⇈
bormand # 0 ⇈
Какое секьюрити )))
guest # 0 ⇈
При CSP не пойдет. При CORS пойдет, но ответа ты не получишь.
С CSRF я точно не сделаю
<img src="http://socset.ru/poslat_soobsenone=ты_хуй"
bormand # 0 ⇈
guest # 0 ⇈
кажется что он есть функция от:
* random
* уникального ID сайта
bormand # 0 ⇈
Криптостойкий надеюсь? А не хуйня, которую временем и номером процесса засидили?
> уникального ID сайта
Насколько уникального? Могу ли я забыть его вписать? Есть ли какая-то утечка данного id?
guest # 0 ⇈
вопрос к платформе. Думаю что да, на современном-то железе и современном ОС.
>Насколько уникального? Могу ли я забыть его вписать?
Он генерируется при создании сайта, довольно длиный.
>Есть ли какая-то утечка данного id?
Считается, что нет.
Ты должен относиться к нему как к приватному ключу например, и не показывать его никому.
Но наверное можно его как-то так криво использовать, что он утечет
bormand # 0 ⇈
Вопрос исключительно к джанге, только они решают какой генератор будет использоваться и чем они будут его сидить. Наличие хороших генераторов в ОС не отменяет говна на стороне софта. Хоть это и не пыхомакаки, конечно.
> считается что нет
Ну ок. В целом выглядит норм. Даже с плохим генератором должно вытянуть если этот секрет не утечёт (хотя конечно надо бы уточнить насколько качественно он сгенерён).
guest # 0 ⇈
https://docs.python.org/3/library/os.html#os.urandom
вот ключ
https://docs.djangoproject.com/en/3.0/ref/settings/#secret-key
bormand # 0 ⇈
А ты оптимист. Нельзя с таким отношением с безопасностью работать.
guest # 0 ⇈
Но мне стало интересно, и я нашел
https://docs.python.org/3/library/secrets.html#secrets.choice
надо читать https://www.python.org/dev/peps/pep-0506/ -- насколько он безопасен
The secrets module provides access to the most secure source of randomness that your operating system provides.
----
Ну и в целом джанго это не Umi.CMS: там всё таки как правило не полные дебилы сидят, так что обычно они принимают не самые тупые решения
gost # 0 ⇈
guest # 0 ⇈
guest # 0 ⇈
guest # 0 ⇈
BOKCEJIbHblu_nemyx # 0 ⇈
KOPOHABuPYC # 0 ⇈
jojaxon # 0 ⇈
guest # 0 ⇈
а зоголовок вот
https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
gost # 0 ⇈
> кидать произвольные запросы куда угодно, а потом просто прячут от него ответ если вдруг нельзя было.
guest # 0 ⇈
Если на твоем сайте расположен файл foo.js, то при этом заголовке он не сможет пойти аджаксом на другой домен.
Запроса не будет
bormand # 0 ⇈
Если DNS злоумышленника имеет очень маленький TTL, то он может вращать IP домена, с которого был загружен скрипт. И тем самым для этого скрипта все твои девайсы в локалке будут same origin со всеми вытекающими последствиями - скан, подбор пароля, анальный зонд в роутере.
gost # 0 ⇈
bormand # 0 ⇈
bormand # 0 ⇈
Атаку, насколько я помню, воскресили из-за всяких биткоин кошельков и прочей хуйни с локальными веб-интерфейсами. Почему-то считается, что порт на 127.0.0.1 - это достаточная защита и туда никто не пролезет.
3.14159265 # 0 ⇈
> то это всё-таки TLS хуёво спроектирован
Нет, там уязвимость давал архиватор.
Точнее целое семейство уязвимостей: CRIME, BEAST, BREACH.
It relies on the attacker being able to observe the size of the ciphertext sent by the browser while at the same time inducing the browser to make multiple carefully crafted web connections to the target site. The attacker then observes the change in size of the compressed request payload, which contains both the secret cookie that is sent by the browser only to the target site, and variable content created by the attacker, as the variable content is altered. When the size of the compressed content is reduced, it can be inferred that it is probable that some part of the injected content matches some part of the source, which includes the secret content that the attacker desires to discover.
Там был прикол именно в сайд-эффекте от архивации текстов. Ворецируя куски запросов, можно было смотреть как меняется архивированная длина, и угадывать части текста в кукисах, совпадающие с ворециями в запросе.
В случае бинарного протокола с фиксированной длиной такой питушни бы не было.
bormand # 0 ⇈
Ну вот собственно и ключевой момент, вся суть веб-параши.
Эти мудаки сами пустили злоумышленника на атакуемую тачку и дали ему право кидать произвольные запросы на сайты, к которым он не имеет никакого отношения. За каким хуем?!
А потом начали чинить там где не сломано (безобидное зожатие).
Они и с бинарным протоколом с фиксированной длиной тебе оракула породят. С такой то "моделью безопасности". Хотя это, конечно, будет сложнее.
j123123 # 0 ⇈
> Детали не помню, они жали хедеры, но злоумышленник мог слать хитрые запросы, угадывать какие хедеры в ответе и какой контект архиватора и через это как-то сильно упрощалось дешифровка SSL.
Ну тут всё более-менее понятно, ведь зожимая текстушню, мы получаем разный размер в зависимости от того, какая текстушня была зожата, и по размеру зожатой текстушни можно там что-то угадывать. Но бинарнушня от этого тоже может поцтрадать, если эта бинарушня имеет разный размер в зависимости от некоторой хуйни, которую в нее сериализовали, или если ее тоже каким-то хером зожимают. Тут всё достаточно сложно, и вообще хер там плавал.
Можно просто сделать чтоб там заголовок имел фиксированный размер в байтах, и тогда такой хуйни не будет.
j123123 # 0 ⇈
3.14159265 # 0 ⇈
Бинарушня будет занимать меньше места, иметь фиксированный размер и парситься сишкой автоматом.
А текстушня плавающей, неудобной в парсинге.
> Зная размеры конкретных картинок, можно по размеру передаваемой шифрованной хуйни таким образом понять, какие конкретно картинки запрашивались
Эээ. Если на порносайте миллионы картинок, то неизбежно будут коллизии.
Тем более откуда уверенность что там зашифрованна картинка, а не какой-то скрипт?
>даже в периоды неактивности срать каким-то мусором, даже если пользователь нихуя не запрашивает
Это и так происходит. На многих сайтах есть polling и просто xhrы.
j123123 # 0 ⇈
Если подряд просматривать картинки из какого-то сета, т.е. открывать сначала первую, потом вторую, третью и так далее - тут уж можно понять, что есть на том сайте такой-то набор картинок, первая картинка столько килобайт занимает, вторая - столько и так далее - таким образом можно понять, что вот этот конкретный сет просматривался. И тут уже с коллизией сложнее
guest # 0 ⇈
j123123 # 0 ⇈
3.14159265 # 0 ⇈
Перепитушня.
j123123 # 0 ⇈
Это уже по сути timing атака
j123123 # 0 ⇈
gost # 0 ⇈
KOPOHABuPYC # 0 ⇈
guest # 0 ⇈
gost # 0 ⇈
Мудифицируя X (индекс в строке), Y (ASCII-код символа) и условие (<, >, =) можно быстро (за ~8*len(secret_field) операций) подбирать значения полей даже тогда, когда в ответ вообще ничего не возвращается.
3.14159265 # 0 ⇈
Правда непонятно практическое применение. Зачем вообще надо писать sleep в запросе?
3.14159265 # 0 ⇈
А, я понял, мы сами его инжектим.
bormand # 0 ⇈
gost # 0 ⇈
3.14159265 # 0 ⇈
Так я же об этом и твержу.
Как бы делал я или царь?
Метод кодируется байтом, вместо GET/POST/PUT/PATCH = enum {1,2,3,4..}
Жопулярные хедеры кодируются не текстом, а тоже байтами.
Для штук типа Content-Type значения контента тоже выбираются из таблицы.
А вот для юзеринпутов типа куков и прочей юзерагент питушни — вореабельные строки.
Тогда по-крайней мере размер хедеров не будет пидорасить размер ответа.
И парсить удобнее, т.к. формат бинарный.
guest # 0 ⇈
и как делать webdav и прочие расширения?
>Жопулярные хедеры кодируются не текстом, а тоже байтами.
все сто сорок четыре штуки?
>Для штук типа Content-Type значения контента тоже выбираются из таблицы.
Подскажите, под каким номером идет контент тайп для документа автокад? А музыкальный файл flac под каким?
3.14159265 # 0 ⇈
Джвух бат зожатия информации не хватит?
65535 вореций хедеров.
>и как делать webdav и прочие расширения?
Сделать диапазон пользовательских кодов.
Которые могут стать стандартами де-факто.
nemyx # 0 ⇈
bormand # 0 ⇈
3.14159265 # 0
Царь опять прав оказался. ЧСХ.
guest # 0
nemyx # 0 ⇈
Лежит поле богато, в нём нора засрата,
Там срамной порог, там живёт хорёк.
Поди с раба Божьего (имя)
На ту нору вся грязь с нутра:
Коли, охи, ахи, вздохи, слёзы,
Маета, боли живота.
Поди, дристунья, на ту нору. Аминь.
KOPOHABuPYC # 0 ⇈
Видать, прав был Чехов, когда сказал, что искоренить совсем "грязь" невозможно, ее можно только прогнать на другое место.
KOPOHABuPYC # 0 ⇈
guest # 0
guest # 0
BOKCEJIbHblu_nemyx # 0
территоге
подозрителевизороге
форумеется
предлагодаря
катастрофит
багоритму
аметит фикат
зловременем
сервероверить
читаемодан
пирформированному
поебень-очень
встратегия
целевога
серверия
developerating
парамечаю
благоворные
роутерфейсами
пыхомать
Криптостальное
вертификаты
говорециями
3.14159265 # 0 ⇈
nemyx # 0 ⇈
guest # 0
Если у тебя два моника (hdpi и нет) то ты в жопе: один будет мелкий, или другой крупный.
Есть scale у xrandr, но при скейлинге шрифтов будет блюр (потому что их рендерят без учета font hinting).
Единственный выход -- zaphod heads.
Интересно, как это решает винда?
bormand # 0 ⇈
Пишут, что в десятке таки запилили отдельный масштаб окошек на каждый моник.
guest # 0 ⇈
я пишу букву Ы шрифтов 10 поинтов. Половина буквы на одном моне, половина на другом
gost # 0 ⇈
На одном рисуется b, на другом — l.
guest # 0 ⇈
bormand # 0 ⇈
MAKAKA # 0 ⇈
У меня шрифт 10pt на одном мониторе имеет размер N пикселей, а на другом N*4.
Как можно отрендерить его, когда для разных резолюшено разные хинты?
bormand # 0 ⇈
MAKAKA # 0 ⇈
bormand # 0 ⇈
Но опять же, мне кажется что майки пошли по консервативному пути чтобы не испортить существующий софт и кусок окна на одном из моников будет тупо мыльным.
MAKAKA # 0 ⇈
* меняем DPI (Xft.dpi и xrandr --dpi)
* запускаем прогу
* меняем обратно
Получается боль-мень нормально, но если такую прогу утащить на другой монитор, то она конечно превратится в тыкву
bormand # 0 ⇈
При переходе с моника на моник видно как прога адаптируется под новый масштаб. Просто все окно в целом становится мельче или крупнее. Т.е. на мониках с реально разным дпи это будет смотреться довольно хуёво.
Но, к слову, часто ли ты юзаешь окна растянутые на 2 экрана?
bormand # 0 ⇈
А старый софт видимо тупо залочат под коэффициент того моника, на котором его запустили. И хоть затаскайся.
guest # 0 ⇈
guest # 0 ⇈
То-есть прога получает нотификаицю от ОС о смене DPI от переноса окна?
Почему в прыще так нельзя решить? придется переписать весь софт?
bormand # 0 ⇈
Ну кстати х.з. почему в прыщах не сделали. Пишут что GTK под вендой вполне так обрабатывает эти сообщения. Qt скорее всего тоже умеет. Т.е. основные фрейморки к этому готовы.
MAKAKA # 0 ⇈
dpi завезли в xrandr, но и там он кажется что сделан поверх фейкования размера экрана. В общем мрак, говно, и 1989-й год.
Может, в вейленде пофиксят
guest # 0 ⇈
Вроде бы супергибкий, сложный, навороченный фреймворк с кучей расширений, но абстракции постоянно текут, и всё работает через жопу.
Может не так уж и плоха идея выкинуть всё, и переписать с ноля
bormand # 0 ⇈
В иксах вроде даже свой юникод был (или даже сейчас есть?)
guest # 0 ⇈
MAKAKA # 0 ⇈
"Не дай бог мне иметь дело с виндой на сервере
Не дай бог мне иметь дело с линуксами на декстопе" (С)
Хотя конкретно тут соснул скорее Xorg, а вернее даже X11, а он всё же не прыщи. Так что соснули все юниксбляди
jojaxon # 0 ⇈
bormand # 0 ⇈
jojaxon # 0 ⇈
32:9 не хочешь? https://www.lg.com/ru/monitors/lg-49WL95C-W
bormand # 0 ⇈
Desktop # 0 ⇈
Вон на картинке даже тебе нарисовали видеоредактор.
Ещё видел, такие используются у диспетчеров. Везде, короче, где есть какая-то колбаса из дорожек или схем.
Я б не отказался от такого. Но цена космос
bormand # 0 ⇈
Desktop # 0 ⇈
bormand # 0 ⇈
Но, в целом, для игр 2 моника удобнее получается - один в эксклюзивном режиме под игру чтобы десктоп свои тормоза не вносил, второй под какие-нибудь чатики или доки. И не надо пердолиться с растягиванием и положением окна, как это пришлось бы делать на одном большом.
Desktop # 0 ⇈
bormand # 0 ⇈
Desktop # 0 ⇈
Правда, у меня сейчас и двух мониторов-то нет, плак-плак
guest # 0 ⇈
jojaxon # 0 ⇈
MAKAKA # 0 ⇈
Desktop # 0 ⇈
MAKAKA # 0 ⇈
Интересно, а бывает смулятор маршрутки?
Или наоборот: человек работает машинистом, а в свободное время играет в симулятор программирования
jojaxon # 0 ⇈
балуется с пхп-фреймворками?
MAKAKA # 0 ⇈
https://youtu.be/TxbvArIqskg?t=15
Симулятор козла!
Desktop # 0 ⇈
Симулятор программирования тоже есть, посмотри на игры Zachtronics.
> у меня нету хобби.
- чо так?
3.14159265 # 0 ⇈
Называется оный симулятор «Desert Bus».
Драйвовая штука. Очень рекомендую.
BOKCEJIbHblu_nemyx # 0 ⇈
А кто-то делит один монитор с соседом по комнате.
guest # 0 ⇈
guest # 0 ⇈
одолжив компьютер на денек у соседа по общежитию
MAKAKA # 0 ⇈
А программирую на листочке, и ношу потом его на работу, и там ввожу в комп
guest # 0 ⇈
jojaxon # 0 ⇈
guest # 0 ⇈
jojaxon # 0 ⇈
nemyx # 0 ⇈
guest # 0 ⇈
guest # 0 ⇈
nemyx # 0 ⇈
3.14159265 # 0 ⇈
nemyx # 0 ⇈
jojaxon # 0 ⇈
Ну или в тетрис играть.
bormand # 0 ⇈
MAKAKA # 0 ⇈
Коллеги потом читают на моне 4:3, и тупят
jojaxon # 0 ⇈
Desktop # 0 ⇈
jojaxon # 0 ⇈
jojaxon # 0 ⇈
jojaxon # 0 ⇈
MAKAKA # 0 ⇈
jojaxon # 0 ⇈
guest # 0 ⇈
Java на HDPI это пиздец
guest # 0 ⇈
3.14159265 # 0 ⇈
Всё-таки люди потеряли чувство прекрасного.
Эпоха Возрождения. Золотое сечение.
А что теперь? Всё засрато т.н. «cовременным искусством». «Пирфомансы», «инсталяции», «каляки-маляки» сплошные «танковые щели».
guest # 0 ⇈
MAKAKA # 0 ⇈
3.14159265 # 0 ⇈
Desktop # 0 ⇈
guest # 0
j123123 # 0
Сразу видно - настоящие Олимпиадники!
guest # 0 ⇈
ну и http они неправильно ищут.
надо так
host[0] == 'h' && host[1] == 't' ...
bormand # 0 ⇈
Хотя не, тут макаки какие-то писали.
guest # 0 ⇈
bormand # 0 ⇈
guest # 0 ⇈
да.
И все таки Уникальный Стиль олимпиадников дурова проёбан.
Что блядь такое host? почему не S4? не p2?
>А это регресс до уровня скриптомакак.
видимо, мне нужен был зеленый.
Я жеж сказал, что таже самая олимпитушня, но на сей раз густо обмазанная крестами
bormand # 0 ⇈
gost # 0 ⇈
j123123 # 0 ⇈
На строке
наблюдаем:
request - это чуть выше
ton::http::HttpRequest это вот там
т.е. да, это std::string
bormand # 0 ⇈
guest # 0 ⇈
лол, это наверное потому, что современных олимпиадников на питоне учат
bormand # 0 ⇈
guest # 0 ⇈
Может, и нельзя макаке в руки кресты давать...
bormand # 0 ⇈
guest # 0 ⇈
В ВК вообще разве хоть что-то не свое есть?
Так и тут
gost # 0 ⇈
Наверное, со времён «ВК» и «Телеграма» дуровские о-лим-пи-ад-ни-ки выросли, стали тимлидами и проджект менеджерами, наняли скриптомакак и теперь командуют им пилить велосипеды с нуля, как на о-лим-пи-а-дах.
guest # 0 ⇈
gost # 0 ⇈
gost # 0 ⇈
Блядь, ну и дерьмо. У них руки что ли отваливались, так лень было пару тайпдефов сделать?
bormand # 0 ⇈
bormand # 0 ⇈
Кстати забавно, что в сишке я мог сказать strncmp(host, "http://", 7). А в крестах удобных и эффективных аналогов тупо нет.
string_view только с с++17.
starts_with только с с++20.
Можно, конечно, std::mismatch() позвать если с++14 и выше и он даже итератор на первый символ за http:// вернёт. Но до с++14 то что делать?
Крестобляди соснули )))
guest # 0 ⇈
nemyx # 0 ⇈
bormand # 0 ⇈
guest # 0 ⇈
ну ты понел
bormand # 0 ⇈
guest # 0 ⇈
nemyx # 0 ⇈
bormand # 0 ⇈
Да, они очень обобщённые и каждый отвечает за что-то одно. Но когда на практике начинаешь их юзать, получается пиздец в духе:
guest # 0 ⇈
В перле не было функции для копирования файла (читай да пиши сам) и не было функции для взятия логарифма по какому-либо основанию, только натуральный можно было: предлагалось log(n)/log(m) делать.
А потом сделали File::copy и Math::Utils..
gost # 0 ⇈
В этом и проблема: чтобы пользоваться крестами, а не дрочить .begin() .end() .begin() .end() до посинения, тебе придётся постоянно намазывать высокоуровневый API. Потом тебя это заебёт, и ты вынесешь его в отдельную либу «util». Потом тебя заебёт ебля с линковкой и ты сделаешь её header-only. Потом ты решишь поделиться своим творением, переименуешь его в «Boost» и зальёшь в какой-нибудь «Github».
Либо ты просто выкинешь нахуй «STL» и запилишь свою стандартную либу: реальные примеры я недавно приводил: «EASTL», «folly», «abseil» — тысячи их.
guest # 0 ⇈
jojaxon # 0 ⇈
guest # 0 ⇈
3.14159265 # 0 ⇈
Блин, ну сравнил boost и какую-то сраную гуаву.
boost реально стоит половины гавеновского репозитория в жабе или десятка апачевских либ (а не только commons).
А npmy с его isTen до возможностей буста срать и срать.
Ну по сути верно. Без буста, в крестах довольно трудно, особенно в старых стандартах. Как и в жабе без ломбоков, гуав и прочей питушни.
nemyx # 0 ⇈
У pethu всего одиннадцать пакетов. Хочу is-eq-forty-two.
https://www.npmjs.com/~pethu
3.14159265 # 0 ⇈
Смотрю на эту зловонную срань, и понимаю что не зря америкосы Пашу озалупили на взлёте. Ох не зря.
Пацан к успеху шёл.
3.14159265 # 0
> Как устроен парсер? Мы, как nginx, определяем массив байт и по нему
Золотые, бессмертные строки Царя как нельзя лучше подходят к моменту.
Какие нодыжс - ты упорлся - это бездарное говно от питухов для питухов. Нормальных вебсерверов не существует. Есть более-мене нормальные, аля http://gwan.ch - ты не смотри там на названия эзыков, а тыкай по ссылки и читай.
Причём тут жс, флеш и прочее - всё это говно, а хтмл тормазит именно сеть и питушит сервера.
Нормальный - я тебе описал. Ты, никакие хттп запросы руками не пишешь - я тебе описал пример с опкодами.
Вместо данных - юзай хтмл, если питух. Юзай бинарь, если не питух. Передавай код на сишке, который будет бутстрапица у тебя в броузёрке и рисовать твой сайтец на опенгл"е, общатся по нормальному сокету и никаких хтмл не нужны вообще.
https://govnokod.ru/13420#comment188632
TEH3OPHblu_nemyx # 0 ⇈
3.14159265 # 0 ⇈
А знаешь, сколько реквестов будет выдавать нормальные бинарные заголовки? И данные, как гзипованный хваст?
Суть в том, что люди изначально придумывают говно, а потом пишут мегобыстрые парсеры, хренансеры - хотя проще изначально выпилить текст и не юзать его нигде.
Потом пишут валидирующие парсеры, ибо "мы питушки не знаем, где мы не ту букву поставили" - это ещё -50% перфоманса, вплоть до -98%.
Я конечно понимаю, что героически решить проблему, которую сами же создали - аля: 10k rps problem. Тцп стек уже лет 100 как 10кrps умеет. Неумело этого: Питушарское хттп, хтмл и прочее говно - но у нас появились процессоры и мы написали омегабыстрые парсеры и добились своих 10krps в лучше случае, и то на статике.
А сейчас нормальный "вебсервер", не то говно, аля нгинкс, апач и прочее - именно парсер опкодов и раскидывателей данных - выдаёт тысячи тонн rps. В тысячи раз больше, чем самый илитный веб. Как так?
Заголовок к нормальном протоколе - это опкод и его стрктура. Это парсится процессором на скорости близкой к терабайту в секунду максимум - ну 100гигов дастс даже в самом слабом случае с тысячей переходов. Т.е. на порядки быстрее ущербанского гигабита.
Сравни это с ущербанским вебом. Кому нежен этот питушарних html, хмл и иные реализации этого говна? Выпили это говно - запили нормальное бинарное представление. Сразу будет буст на порядки - нет, мы питухи - мы юзаем говно, гинерим говно и рисуем говно. Мы хвалимся тем, что мы хоть что-то сделали и оно работает.
guest # 0 ⇈
напишите нормальный клиент на плюсах под API конкретной операционки и сервер на них же, и протоколом бинарный: тупо гоняйте структурки правильно выравненные и с правильным байтордером.
И ваше приложение будет в пиздилион раз быстрее и меньше весить, чем клиент на жопаскрипте в хроме и сервер на апаче
Гавноеды ебучие сначала шлют контент джейсоном в base шесятчетыре, а потом чото там "оптимизируют"
Идите двойные кавычки на одинарные поменяйте в пхп, оптимизаторы мамиеы
guest # 0 ⇈
> Идите двойные кавычки на одинарные поменяйте в пхп, оптимизаторы мамиеы
сука я аж хрюкнул