<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Копытов Иван: заметки с тегом сайт</title>
<link>https://kini24.ru/tags/sayt/</link>
<description>Блог ленивого сисадмина</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.3 (v4134)</generator>

<itunes:subtitle>Блог ленивого сисадмина</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>Получаем данные с сайта СГК для Home Assistant</title>
<guid isPermaLink="false">276</guid>
<link>https://kini24.ru/all/poluchaem-dannye-s-sayta-sgk-dlya-home-assistant/</link>
<pubDate>Thu, 20 Feb 2025 10:22:01 +0700</pubDate>
<author></author>
<comments>https://kini24.ru/all/poluchaem-dannye-s-sayta-sgk-dlya-home-assistant/</comments>
<description>
&lt;p&gt;В Home Assistant у меня было отслеживание почти всех счетов по квартире: электроэнергия, коммунальные платежи, ТКО, капитальный ремонт и т. д. Проблема была только с сайтом компании СГК, которая занимается предоставлением горячей и холодной воды, отоплением и водоотведением. При помощи таких интеграций, как scrape и multiscrape загрузить данные с их сайта не получалось, поэтому пришлось пойти более сложным путем и написать свой скрипт. На деле он оказался совсем простым, требует доработки в плане проверок ответов сервера, но даже в таком виде он вполне работоспособен. Чтобы не перечислять все данные, возьму только отопление.&lt;/p&gt;
&lt;code python&gt;
import requests
import json

login = data.get("username", "")
password = data.get("password", "")
login_url = 'https://krk.sibgenco.services/Account/Auth'
data_url = 'https://krk.sibgenco.services/fl/accounts/getAccounts'

headers = {
    "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0",
}

# Создаем новую сессию
session = requests.Session()
# Авторизуемся на сервере
result = session.post(login_url, data = 'login=' + login + '&amp;password=' + password, headers = headers)
# print(result.text)

# Получаем данные в JSON формате
result = session.get(data_url, headers = headers).json()
session.close()

# Перекодируем текст в читаемый
result = result.encode().decode('unicode-escape', 'ignore')
result = json.dumps(result)
result = json.loads(result)

# Убираем лишние кавычки в разделе "Cards" (откуда взялись?)
result = result.replace('"Cards":"', '"Cards":').replace('}]"}', '}]}')
# print(type(result))
# print(result)

if len(result) &gt; 0:
    logger.info("Данные от СКГ получены")
else:
    logger.warning("Ошибка получения данных от СГК")
# print(result.encode().decode('unicode-escape', 'ignore'))

# Преобразуем строку данных в JSON объект
json_data = json.loads(result)["Accounts"][0]["CalcData"]["Products"]#[0]["ToPay"]

# print(json_data, '\n')
# print(json.dumps(json_data), '\n')

# for product in json_data["Accounts"][0]["CalcData"]["Products"]:
#     print(product["ItemName"] + ": " + str(product["ToPay"]) + " руб.")

if json_data[0]["ToPay"] &gt; 0:
    hass.states.set('sensor.sgk_heating', json_data[0]["ToPay"] * -1)
else:
    hass.states.set('sensor.sgk_heating', json_data[0]["ToPay"])
&lt;/code&gt;
&lt;p&gt;В ходе работы скрипта получаем несколько секций для каждой из услуг, которые выглядят вот так:&lt;/p&gt;
&lt;code json&gt;
  - IsFine: false
    Item: 13
    ContractId: 307015
    ItemName: Отопление
    SaldoBegin: 4228.65
    Paid: 4228.65
    SaldoEnd: 0
    FineEndCheck: true
    FineEnd: 0
    AccrualsCheck: false
    Accruals: 0
    Recalculation: 0
    ToPayCheck: true
    ToPay: 0
    ChargeDetails: ""
    PayDetails: 08.02.2025 4228.65;
    FinePayDetails: ""
    WebPayDetails: 08.02.2025=5338.65=20250208171312-99240-6764617.585349
&lt;/code&gt;
&lt;p&gt;Далее просто создаем автоматизацию в Home Assistant, которая будет запускать этот скрипт. Для надежности перед первым запуском создаем несколько новых сенсоров в примерно таком формате:&lt;/p&gt;
&lt;code python&gt;
    # Задолженность за отопление, итого
    heating_debt_summary:
      unique_id: &lt;тут ваш ID сенсора&gt;
      attribute_templates:
        Пеня: "{{ states('sensor.sgk_heating_penya') }} ₽"
      device_class: monetary
      friendly_name: Задолженность за отопление
      unit_of_measurement: "RUB"
      # value_template: "{{ states('sensor.sgk_heating') | float(0) + states('sensor.sgk_heating_penya') | float(0) }}"
      value_template: "{{ states('sensor.sgk_heating') | float(0) }}"
&lt;/code&gt;
&lt;p&gt;Как видно, в сенсоре будет также атрибут «пеня». Можно вывести суммарную задолженность — долг+пеня, можно вывести только основную — на выбор.&lt;br /&gt;
И вот после сайта СГК меня слегка «понесло» и сделал схожие скрипты для получения информации с сайтов ФНС, капремонта, энергосбыта и регистратора доменов. С ФНС было интересно — там сначала нужно пройти basic-авторизацию, получить токен безопасности, авторизоваться еще раз и слать его при каждом запросе данных. А дальше было уже намного легче — у ФНС существует API, которое они активно используют. Официальной документации по нему нет, но, покопавшись на сайте, можно легко получить все запросы. Для чего нужны эти данные? Например, чтобы отслеживать задолженность по налогам (в том числе и самозанятого), недвижимость и банковские счета. Сейчас такое время, что на тебя могут открыть какой-то счет в банке, сделать тебя «начальником» какой-то конторы, а ты даже будешь не в курсе. Но стоит отметить, что в налоговой отображаются только обычные, дебетовые счета, информации по кредитам там нет.&lt;/p&gt;
</description>
</item>

<item>
<title>Движение автобусов в Home Assistant</title>
<guid isPermaLink="false">273</guid>
<link>https://kini24.ru/all/dvizhenie-avtobusov-v-home-assistant/</link>
<pubDate>Wed, 17 Jan 2024 23:26:21 +0700</pubDate>
<author></author>
<comments>https://kini24.ru/all/dvizhenie-avtobusov-v-home-assistant/</comments>
<description>
&lt;h3&gt;Добавление движения общественного транспорта в Home Assistant&lt;/h3&gt;
&lt;p&gt;Наконец-то у меня получилось. Как обычно, делал всё сильно неспешно при наличии свободного времени и желания. «Воды» не будет, поэтому поехали.&lt;br /&gt;
Сейчас не вспомню как, но как-то я вышел на адрес сайта, который отдает данные в формате JSON. Так как меня интересовал в первую очередь конкретный маршрут трамвая, то я получил вот такой вот адрес:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;https://mu-kgt.ru/informing/wap/marsh/?m=6%F2%F0&amp;amp;action=getMarshData&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Что здесь интересного?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;m=6%F2%F0&lt;/i&gt; — номер маршрута и обозначение типа транспорта. В данном случае часть «%F2%F0» — это всего лишь русские буквы «тр», то есть трамвай. Для троллейбуса это будет просто «т» или «%F2», для автобуса это либо «а», либо вообще без буквы — если честно, не пробовал, да и лень было.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;action=getMarshData&lt;/i&gt; — вызывает одноименную функцию в скрипте.&lt;br /&gt;
Переходим в Home Assistant. Здесь я создал новый сенсор в configuration.yaml такого вида:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sensor:
  - platform: rest
    resource: https://mu-kgt.ru/informing/wap/marsh/?m=6%F2%F0&amp;amp;action=getMarshData
    name: Трамвай 6 прибытие
    unique_id: tram6_arrival
    value_template: &amp;quot;{{ value_json.ts_line.A[-1].st_arrive }}&amp;quot;
    scan_interval: 120&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Самое важное здесь — value_template, в котором содержится путь до нужной остановки, по которой получаем информацию о времени прибытия. Буквой «А» закодировано направление движения транспорта, которое вы видите в левой части экрана, а буквой «В» — в правой части экрана.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://kini24.ru/pictures/Snimok-ekrana-ot-2024-01-17-23-04-37@2x.png" width="656" height="329" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Такие же буквы присутствуют на самом сайте и в приложении.&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Я сделал два сенсора: прибытие и убытие, чтобы ориентироваться когда придет следующий трамвай на конечную остановку. Можно оформить и получше, но это — не главное.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://kini24.ru/pictures/Snimok-ekrana-ot-2024-01-17-21-16-28@2x.png" width="243" height="85" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Вид сенсоров в Home Assistant&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Ах да, чуть не забыл. Как посмотреть номер нужной остановки? Открываем страницу по &lt;a href="https://mu-kgt.ru/informing/wap/online/"&gt;ссылке&lt;/a&gt;, выбираем тип транспорта, маршрут и направление движения. Затем щелкаем на нужной остановке, чтобы открыть прогноз движения транспорта. Среди прочей информации будет строка вида:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;Остановка: Детский кинотеатр «Мечта» (код 336)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;В скобках мы и увидим код остановки. В данных, которые нам отдает скрипт по запросу, это код содержится в поле &lt;i&gt;st_regnum&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;И еще небольшое дополнение. Значения «0» и «-1», конечно, хороши для выбора конечных остановок при условии, что мы не знаем количество остановок на маршруте, который может измениться, например, из-за ремонта дороги или аварии. Следующий шаблон выбирает остановку с заданным кодом:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;value_template: &amp;gt;-
  {% set stops = value_json.ts_line.A %}
  {% for stop in stops %}
    {% if stop.st_regnum == 1989 %} {{ stop.st_arrive }} {% endif %}
  {% endfor %}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Обновлено. Автобусы маркируются без буквы в URL, только номер маршрута.&lt;/p&gt;
</description>
</item>

<item>
<title>Зеркало NOD</title>
<guid isPermaLink="false">227</guid>
<link>https://kini24.ru/all/zerkalo-nod/</link>
<pubDate>Tue, 19 Feb 2019 14:36:37 +0700</pubDate>
<author></author>
<comments>https://kini24.ru/all/zerkalo-nod/</comments>
<description>
&lt;p&gt;Немного прошелся по своему зеркалу, «причесал», подправил недочеты. Сделал страницу регистрации, ибо негоже когда человеку приходится писать тебе, чтобы получить доступ к нему. Сейчас можно просто открыть страницу регистрации, ввести свой email, который будет являться логином и после нажатия кнопки «Отправить» скрипт сохранит данные на сервере и отправит их копию пользователю на указанную электронную почту.&lt;br /&gt;
Поначалу хотел использовать команду системы для генерации хэша пароля, но оказалось, что последний генерируется неправильно. На счастье в интернете нашелся PHP-код, который выполняет те же самые действия, но уже правильно.&lt;br /&gt;
Потом хотел сделать чтобы все страницы сайта располагались в одном файле, но что-то пошло не так и я отказался от этой затеи. Не настолько я знаю PHP и JS, чтобы отлавливать и исправлять ошибки в коде.&lt;br /&gt;
В конце страницы появилась небольшая статистика: сколько всего зарегистрировано пользователей, сколько в этом месяце использовало зеркало и сколько человек сейчас находится на сайте. Любопытно, что зарегистрировалось около 50 человек, а используют примерно 30. Где остальные? Судя по журналам, они даже не пытались скачивать обновления. По этому поводу мелькает мысль примерно раз в полгода удалять тех, кто ни разу не обновлялся с зеркала. Или уже оставить как есть?&lt;/p&gt;
</description>
</item>

<item>
<title>Биометрическая авторизация</title>
<guid isPermaLink="false">186</guid>
<link>https://kini24.ru/all/biometricheskaya-avtorizaciya/</link>
<pubDate>Thu, 12 Apr 2018 09:30:42 +0700</pubDate>
<author></author>
<comments>https://kini24.ru/all/biometricheskaya-avtorizaciya/</comments>
<description>
&lt;p&gt;Несколько дней назад наткнулся на &lt;a href="https://xakep.ru/2018/04/11/webauthn-almost-here/"&gt;новость&lt;/a&gt;, которая показалась мне очень интересной. Сегодня утром нашел более доступный ее текст.&lt;/p&gt;
&lt;p&gt;«&lt;i&gt;Консорциум W3C (World Wide Web Consortium, Консорциум Всемирной паутины) и альянс FIDO (Fast IDentity Online) начали работу над Web Authentication (WebAuthn) еще в 2015 году. Напомню, что в частности данный API позволяет пользователям входить в Google, Facebook, Dropbox, GitHub и так далее при помощи аппаратных ключей YubiKey.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;На базе FIDO 2.0 Web API был разработан WebAuthn, который обладает более широкими возможностями и в теории позволяет отказаться от использования паролей вообще. Так, WebAuthn предлагает использовать для аутентификации на сайтах и в приложениях аппаратные ключи, отпечатки пальцев, распознавание лиц, сканы радужной оболочки глаза и прочую биометрию.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Своеобразным „компаньоном“ WebAuthn станет протокол Client to Authenticator (Client to Authenticator Protocol, CTAP). Как следует из названия, основная роль CTAP — это установление связи между браузером и сторонней системой аутентификации, к примеру, NFC или USB-ключом, сканером отпечатков пальцев в смартфоне или ноутбуке. Специалисты W3C объясняют, что для обеспечения работоспособности новой аутентификационной схемы оба API должны работать сообща.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Так как Google, Microsoft и Mozilla поддержат разработку, ожидается, что поддержка WebAuthn API появится в Chrome, Edge и Firefox в самом скором времени. Так, WebAuthn заработает в Chrome 67 и Firefox 60, чей релиз запланирован примерно на май 2018 года.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Ожидается, что эта разработка поможет защитить пользователей от фишинга, краж паролей и даже атак типа „человек по середине“ (man-in-the-middle). Ведь ИБ-специалисты давно пришли к выводу, что использование паролей вряд ли можно назвать хорошей практикой.&lt;/i&gt;»&lt;/p&gt;
&lt;p&gt;Не более пары недель назад вспоминал про приложение для смартфона, в отзывах для которого попросил разработчиков добавить авторизацию по отпечатку пальца. Они признали, что имея хороша и даже внедрили функцию в очередное обновление. К сожалению, пока что она не работает.&lt;br /&gt;
Но разговор не об этой программе. Тогда же у меня мелькнула мысль, что неплохо было бы и на других ресурсах использовать отпечаток пальца. Хотел поинтересоваться стоимостью сканера для этих целей, но потом закрутился в череде дел и благополучно забыл об этом. Вспомнил только сейчас, когда читал вышеуказанную новость.&lt;br /&gt;
Что я могу сказать? Ждем новое поколение программ, которые будут воровать ваши личные данные и связывать их с вашими биометрическими данными. Очень неплохой способ сбора подобной информации, затраты на который минимальны, по сравнению с другими способами.&lt;/p&gt;
</description>
</item>

<item>
<title>У тебя нет шансов!</title>
<guid isPermaLink="false">95</guid>
<link>https://kini24.ru/all/u-tebya-net-shansov/</link>
<pubDate>Mon, 02 Oct 2017 10:55:02 +0700</pubDate>
<author></author>
<comments>https://kini24.ru/all/u-tebya-net-shansov/</comments>
<description>
&lt;p&gt;Сижу я, значит, на выходных дома, думаю чем бы заняться. Тут приходит уведомление на email, что начислен мне налог за квартиру. «О!» — думаю, — «точно! Надо за хату заплатить!» Решил начать с налога.&lt;br /&gt;
Захожу в личный кабинет, выбираю строчку с текущими начислениями, жму «Оплатить». Открывается страница с выбором банков, через которые я могу провести оплату. Жму Сбер, сайт мне отвечает ошибкой. «Плять» — подумалось мне, ибо текст ошибки не оставлял мне никакого шанса на оплату. Вернулся на предыдущую страницу, выбрал ради интереса пункт «Госуслуги». «Хер тебе!» — ответил сайт, выдав ту же самую ошибку. Другие банки ответили так же. Опечалившись, пришлось сдаться и накатать жалобу в техподдержку налоговой.&lt;br /&gt;
Ну что же, попробуем оплатить коммунальные услуги. Начал с мобильного приложения на телефоне, потому что ушел курить. Выбрал ранее созданный шаблон, ввел сумму, кучу раз нажал кнопку «Продолжить», каждый раз проверяя что все верно и плачу я за себя. После очередного «продолжения» приложение мне выдало забавное сообщение: «Сумма такая-то не совпадает с сумой оплаты». Текст не точный, но смысл заключался в том, что рассчитанная сумма для оплаты не совпадает с суммой, которую я хочу внести на счет. Интересненько... Продолжаю уже на компьютере через «Сбербанк Онлайн» (я быстро курю). Получаю ту же самую ошибку. В общем, заплатить за квартиру мне не удалось. «Суки!» — вертелось у меня в голове. Подумав несколько секунд, открываю сайт УК, вхожу в личный кабинет. Выбираю оплату по карте, вписываю сумму оплаты, меня перебрасывает на страницу банка. Комиссия составила 1% от общей суммы. Да наплевать, ввожу код из СМС и продолжаю. Деньги улетели на первой космической, о чем телефон радостно мне сообщил. Да лучше бы они с такой же скоростью прилетали! :-)&lt;br /&gt;
Оплата элетроэнергии прошла без сучка и задоринки, как и телефон и интернета.&lt;/p&gt;
</description>
</item>

<item>
<title>И снова про зеркало NOD32</title>
<guid isPermaLink="false">89</guid>
<link>https://kini24.ru/all/i-snova-pro-zerkalo-nod32/</link>
<pubDate>Mon, 18 Sep 2017 00:21:51 +0700</pubDate>
<author></author>
<comments>https://kini24.ru/all/i-snova-pro-zerkalo-nod32/</comments>
<description>
&lt;p&gt;Обновил &lt;a href="https://nod.kini24.ru"&gt;страницу зеркала&lt;/a&gt;, сделал ее почти полностью на базе bootstrap. Остались кое-какие нюансы, от которых планирую избавиться чуть позже.Если вкратце, то добавить немного интерактивности. Пока что мешает, в основном, таблица, генерируемая скриптом обновления. С одной стороны, скрипт отдает «чистую» таблицу, которую я могу использовать на сайте. С другой я бы и рад заменить некоторый текст в этой таблице, но... При очередной проверке скрипт заменяет измененные файлы на оригинальные и я получаю тот же самый текст, который хотел заменить. CSS в этом деле мне не помощник, буду искать другие пути.&lt;br /&gt;
Заодно, пока редактировал страницу, нашел несколько решений, которых мне не хватало для смены темы оформления блога на bootstrap.&lt;/p&gt;
&lt;p&gt;Upd. Замена текста решилась одной строкой:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;document.body.innerHTML = document.body.innerHTML.replace(&amp;#039;ESET NOD32 сервер обновления&amp;#039;, &amp;#039;Информация о последнем обновлении&amp;#039;);&lt;/code&gt;&lt;/pre&gt;</description>
</item>

<item>
<title>Скрипт передачи данных на сервер narodmon.ru</title>
<guid isPermaLink="false">67</guid>
<link>https://kini24.ru/all/skript-peredachi-dannyh-na-server-narodmon-ru/</link>
<pubDate>Fri, 23 Jun 2017 14:44:41 +0700</pubDate>
<author></author>
<comments>https://kini24.ru/all/skript-peredachi-dannyh-na-server-narodmon-ru/</comments>
<description>
&lt;p&gt;Как и писал ранее, в какой-то момент надоело, что роутер периодически не может отправить данные на сервер, поэтому пришлось немного подредактировать его. После недельного тестирования отправил его администрации ресурса и, после некоторых уточнений, он был добавлен на сайт. Сейчас он находится в разделе «Справка» — «OpenWRT, OR-WRT» — «6. Скрипт для отправки показаний с отказоустойчивостью». Сам скрипт был размещен на &lt;a href="https://github.com/kini24/narodmon-openwrt-script/"&gt;github&lt;/a&gt;. Было добавлено краткое описание работы и кусок журнала его работы, из которого видно как он накапливает данные во время отсутствия связи с сервером, а затем, когда она появляется вновь, отправляет все недоставленные пакеты.&lt;br /&gt;
Самый «интересный» на мой взгляд момент состоит в том, что в моих планах заменить текущий датчик температуры на другие, которые будут передавать данные через домашний WiFi, что, в свою очередь, означает, что я не смогу воспользоваться пакетом owfs и скрипт будет бесполезен для меня. Хотя возможно, что я оставлю этот датчик в качестве «контрольной группы».&lt;/p&gt;
</description>
</item>

<item>
<title>Интересный сайт</title>
<guid isPermaLink="false">46</guid>
<link>https://kini24.ru/all/interesny-sayt/</link>
<pubDate>Thu, 02 Feb 2017 12:31:25 +0700</pubDate>
<author></author>
<comments>https://kini24.ru/all/interesny-sayt/</comments>
<description>
&lt;h2&gt;Сайт, за который мне было бы очень стыдно&lt;/h2&gt;
&lt;p&gt;Нахожусь в поисках кронштейна для своей видеокамеры. Вчера по электронной почте отправил в несколько фирм города письмо с вопросом о наличии кронштейна. Кто-то ответил, кто-то промолчал — нормальная ситуация. В одном из писем мне посоветовали обратиться в магазин «Искра». Пришлось залезть в 2ГИС, чтобы найти его. По итогу не нашел, но в процессе наткнулся на один &lt;a href="http://www.iskra-servis.ru/"&gt;любопытный сайт&lt;/a&gt;. Начав просматривать его, поначалу удивлялся тому, сколько можно сделать ошибок. Причем на главной странице сайта. Но это было только начало.&lt;br /&gt;
В одном из разделов наткнулся на текст. Читая его я не мог отделаться от ощущения, что я попал на сайт АлиЭкспресс. Нет, буквы были знакомые, слова тоже, но смысл предложений от меня ускользал:&lt;/p&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Секретный соус за 16 Тб SSD от Samsung является новым 256Gbit (32 Гб) NAND флэш-штамп компании; в два раза превышает мощность 128Gbit NAND умирает, которые были коммерциализированы различными производителями чипов в прошлом году.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;p&gt;Были и такие, что все понятно, но... Ребята из фирмы явно стараются выбить побольше денег из клиента, совершая ненужную работу и создавая видимость серьезности ремонта:&lt;/p&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Прошивка Bios&lt;br /&gt;
Нужна, если агрегат все чаще зависает, долго грузится. Специалист сделает его прошивку недорого, а именно:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;— разберет ноутбук;&lt;/li&gt;
&lt;li&gt;— отпаяет микросхему bios;&lt;/li&gt;
&lt;li&gt;— выполнит ремонтные работы;&lt;/li&gt;
&lt;li&gt;— соберет устройство.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Прошивка Bios, входящая в ремонт ноутбуков, цены на которую уточняются индивидуально, иногда полностью решает проблему неисправности.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;p&gt;Всего 10 страниц сайта, по мои прикидкам, содержат не менее 1000 ошибок и опечаток. Если бы я был человеком менее грамотным, то хотя бы сделал проверку в том же MS Word или любом другом текстовом редакторе с проверкой орфографии.&lt;br /&gt;
Иногда возникало впечатление, что я читаю статью какого-то новичка на ЯПе — настолько становилось забавно или смешно. Но, по большей части, сайт вызывал полное нежелание пользоваться услугами данной фирмы. Допускаю, что, возможно, сайт делали работники фирмы, не знакомые с языком HTML и не имеющие никакого опыта в создании сайтов. Но что им помешало попросить кого-нибудь из знакомых сделать его? Более, чем уверен, что такой знакомый нашелся бы в их окружении.&lt;br /&gt;
Ну и напоследок фраза из шапки данного сайта:&lt;/p&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Лучшая реклама любого товара — его качество.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
</description>
</item>

<item>
<title>Сайт «Сибмаш»</title>
<guid isPermaLink="false">27</guid>
<link>https://kini24.ru/all/sayt-sibmash/</link>
<pubDate>Thu, 22 Dec 2016 11:05:52 +0700</pubDate>
<author></author>
<comments>https://kini24.ru/all/sayt-sibmash/</comments>
<description>
&lt;p&gt;Доделал некоторое время назад сайта для &lt;a href="http://gruzdvor24.ru" class="nu"&gt;«&lt;u&gt;Сибмаша&lt;/u&gt;»&lt;/a&gt;. Все страницы написаны, так сказать, от руки, кода очень мало. Сильно в этом помог Bootstrap, который позволяет, написав буквально пару слов, добавить, например, выпадающее меню в заголовок. Или переключение вкладок.&lt;br /&gt;
На страницу с контактными данными вписал немного измененный виджет 2GIS. Не стал заморачиваться и встраивать полноценный — мне он кажется достаточно уродским.&lt;br /&gt;
После завершения работы начал, как обычно, «вылизывать» код: минимизировать, ускорять, экспериментировать. Что-то работало, что-то — нет. Потом надоело, больше ничего придумать не смог. Остался только один «косяк», который поправить не получается — иногда переключение закладок происходит слишком быстро. После обновления страницы это исправляется. Почему так происходит — непонятно. Встроил информацию о фирме в тело страницы — это для поисковиков. Добавил ее же в справочник фирм Яндекса.&lt;br /&gt;
На этом пока что все. Когда отдадут следующую порцию информации — будем добавлять её.&lt;br /&gt;
По сравнению с предыдущей версией сайта, то, что получилось — небо и земля.&lt;/p&gt;
</description>
</item>

<item>
<title>Защита сайта при помощи HTTP Public Key Pinning (HPKP)</title>
<guid isPermaLink="false">5</guid>
<link>https://kini24.ru/all/zaschita-sayta-pri-pomoschi-http-public-key-pinning-hpkp/</link>
<pubDate>Tue, 16 Aug 2016 22:24:24 +0700</pubDate>
<author></author>
<comments>https://kini24.ru/all/zaschita-sayta-pri-pomoschi-http-public-key-pinning-hpkp/</comments>
<description>
&lt;p&gt;Данная технология призвана защитить посетителя вашего сайта от атаки типа MITM (Man in the middle, человек посередине). Иными словами посетитель может быть уверен, что данные, которые он получает, исходят с вашего сайта, а не с какого-то другого.&lt;/p&gt;
&lt;p&gt;Суть технологии состоит в создании публичного ключа на основе сертификата, который установлен на вашем сайте. Соответственно, чтобы она работала, требуется валидный сертификат. Впрочем, она будет работать и на самоподписанных (self-signed) сертификатах. Полученный на основе вашего сертификата ключ добавляется в заголовок ответа вашего сервера, после чего браузер сравнивает полученный ключ с тем, который он вычисляет после получения данных о вашем сертификате.&lt;/p&gt;
&lt;p&gt;Итак, что нам требуется:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Какой-либо установленный для сайта сертификат.&lt;/li&gt;
&lt;li&gt;Консоль для получения публичного ключа.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Кстати, не так давно для нормального функционирования этой технологии требовался всего лишь один ключ, сейчас же нужно указывать два или более ключей. На мой взгляд двух будет достаточно, от этого и будем отталкиваться. Второй ключ является «резервным», этот момент я не совсем понимаю, но не будем отступать от требований.&lt;/p&gt;
&lt;p&gt;Действовал я по следующей схеме:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;— получаем сертификат на сайте &lt;a href="https://letsencrypt.org/"&gt;Let’s Encrypt&lt;/a&gt; для двух сайтов: example.com и www.example.com;&lt;/li&gt;
&lt;li&gt;— так как я использую вариант без www, то ключ, полученный на базе первого будет основным, на базе второго — резервным;&lt;/li&gt;
&lt;li&gt;— генерируем ключи для обоих сертификатов;&lt;/li&gt;
&lt;li&gt;— добавляем нужные инструкции в файл /&lt;i&gt;etc/httpd2/conf/sites-available/default-http.conf&lt;/i&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;О получении сертификата рассказывать не буду, достаточно почитать главную страницу сайта. Допустим, вы его получили и установили на свой сайт. Теперь требуется создать ключи при помощи следующей команды:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;openssl x509 -noout -in certificate.pem -pubkey | openssl rsa -pubin -outform der | \&lt;/code&gt;&lt;/pre&gt;&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;openssl dgst -sha256 -binary | base64&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;где &lt;i&gt;certificate.pem&lt;/i&gt; — полный путь к сертфикату.&lt;/p&gt;
&lt;p&gt;После выполнения команды вы получите нечто подобное:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;i&gt;LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ=&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Это и есть нужный вам ключ. Повторяем команду для второго сертификата и добавляем данные в файл конфигурации сайта:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;Header set Public-Key-Pins &amp;quot;pin-sha256=\&amp;quot;pin1\&amp;quot;; pin-sha256=\&amp;quot;pin2\&amp;quot;; max-age=time&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;где:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;pin1&lt;/i&gt; — основной ключ для данного сайта. В моем случае example.com;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;pin2&lt;/i&gt; — резервный ключ для сайта. То есть www.example.com;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;time&lt;/i&gt; — время действия ключа в секундах.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Опциональный параметр &lt;i&gt;includeSubDomains&lt;/i&gt; указывает на то, что ключи действительны также для поддоменов.
Еще один необязательный параметр report-uri указывает на адрес, куда должны отправляться отчеты об ошибках в формате JSON. Его я, возможно, добавлю на сайт, но пока что считаю его ненужным для себя.&lt;/p&gt;
&lt;p&gt;Какие тут есть нюансы? Если вы неправильно настроите HPKP, ваш сайт станет недоступен. Можно также настроить отправку отчетов в случае каких-либо ошибок. Для этого немного меняем заголовок (или просто добавляем еще одной строкой):&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;Header set Public-Key-Pins-Report-Only &amp;quot;pin-sha256=\&amp;quot;pin1\&amp;quot;; pin-sha256=\&amp;quot;pin2\&amp;quot;; max-age=time&amp;quot;&lt;/code&gt;&lt;/pre&gt;</description>
</item>

<item>
<title>Внедрение HTTP Strict Transport Security (HSTS) на свой сайт</title>
<guid isPermaLink="false">4</guid>
<link>https://kini24.ru/all/vnedrenie-http-strict-transport-security-hsts-na-svoy-sayt/</link>
<pubDate>Tue, 16 Aug 2016 11:56:05 +0700</pubDate>
<author></author>
<comments>https://kini24.ru/all/vnedrenie-http-strict-transport-security-hsts-na-svoy-sayt/</comments>
<description>
&lt;p&gt;Сначала небольшая &lt;a href="https://ru.wikipedia.org/wiki/HSTS"&gt;выдержка из википедии&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;i&gt;«HSTS (сокр. от англ. HTTP Strict Transport Security) — механизм, активирующий форсированное защищённое соединение через протокол HTTPS. Данная политика безопасности позволяет сразу же устанавливать безопасное соединение, вместо использования HTTP-протокола. Механизм использует особый заголовок Strict-Transport-Security для принудительного использования браузером протокола HTTPS даже в случае перехода по ссылкам с явным указанием протокола HTTP. Механизм специфицирован в RFC6797 в ноябре 2012 года.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;HSTS помогает предотвратить часть атак, направленных на перехват соединения между пользователем и веб-сайтом, в частности атаку с понижением степени защиты и воровство кук.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Дополнительную защиту https-соединений предоставляют методы Certificate pinning (хранение списка разрешенных для домена сертификатов или CA в исходных текстах браузера) и HTTP Public Key Pinning (англ.). Они предотвращают множество возможностей подмены tls-сертификатов https-сервера.»&lt;/i&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Для внедрения этой технологии нам понадобится несколько вещей:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Наличие валидного сертификата (можно бесплатно получить на сайте &lt;a href="https://letsencrypt.org/"&gt;Let’s Encrypt&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Уверенность в том, что будет использоваться только https протокол, включая все ваши субдомены.&lt;/li&gt;
&lt;li&gt;Полное перенаправление с http-версий сайтов на https.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Если что-то из этого по каким-то причинам вам не подходит, то эта технология вам не нужна.&lt;/p&gt;
&lt;p&gt;Так как у меня используется «старенький» Apache версии 2.2, то и настраивать, соответственно, мы будет его.
Для включения HSTS нам нужно добавить в файл /&lt;i&gt;etc/httpd2/conf/sites-available/default_https.conf&lt;/i&gt; следующие строки:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;&amp;lt;IfModule ssl_module&amp;gt;
    &amp;lt;VirtualHost *:443&amp;gt;
        Header set Strict-Transport-Security &amp;quot;max-age=31536000; includeSubDomains; preload&amp;quot;
   &amp;lt;/VirtualHost&amp;gt;
&amp;lt;/IfModule&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Первые и последние две строки — стандартные для данного файла, если они имеются, то добавлять их не нужно. Нас больше всего интересует третья строчка.&lt;/p&gt;
&lt;p&gt;Инструкция Header set позволяет вставить заголовок в ответ сервера. В данном случае заголовок «Strict-Transport-Security». В скобках за ним расположены параметры этого заголовка:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;max-age&lt;/i&gt; — время в секундах, которое будет действовать этот заголовок. Если быть точнее, то это время, в течение которого сайт будет доступен по протоколу HTTPS. Не рекомендуется устанавливать его менее 18 недель;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;includeSubDomains&lt;/i&gt; — указывается, если действие заголовка распространяется также на поддомены. Не является обязательным;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;preload&lt;/i&gt; — параметр, позволяющий указывать, что ваш сайт никогда не будет доступен по незащищенному протоколу. Не является обязательным. Про него будет чуть ниже.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Итак, данные мы добавили, теперь нужно перезагрузить файлы конфигурации:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;# service httpd2 condreload&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Наличие заголовка в ответе сервера можно проверить, например, на &lt;a href="http://mainspy.ru/otvet_servera"&gt;этом сайте&lt;/a&gt;. Среди прочих вы должны увидеть такую строчку:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;Strict-Transport-Security: max-age=31536000; includeSubDomains; preload&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Идем на сайт &lt;a href="https://www.ssllabs.com/ssltest/"&gt;ssllabs&lt;/a&gt;, вводим адрес своего сайта с указанием https и тестируем, что у нас получилось. Тест занимает некоторое время, его вполне хватит на то, чтобы, например, налить себе чашечку кофе.&lt;/p&gt;
&lt;p&gt;По итогу мы должны увидеть такие строчки:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://kini24.ru/pictures/hsts-01.jpg" width="957" height="41" alt="Эту вы увидите в шапке отчета" /&gt;
&lt;div class="e2-text-caption"&gt;Эту строчку вы увидите в шапке отчета&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://kini24.ru/pictures/hsts-02.jpg" width="854" height="47" alt="Эта будет находиться ближе к концу отчета" /&gt;
&lt;div class="e2-text-caption"&gt;Эта будет находиться ближе к концу отчета&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Если вы их видите, значит все в порядке. В противном случае ищите ошибку.&lt;/p&gt;
&lt;p&gt;И, наконец, про параметр &lt;i&gt;preload&lt;/i&gt;. Существует так называемый «preload list», в котором перечислены все домены, использующие технологию HSTS. Своего рода список «избранных» :-) При желании вы можете &lt;a href="https://hstspreload.appspot.com/"&gt;подать заявку&lt;/a&gt; на включение вашего домена в этот список, но на скорый ответ не рассчитывайте. Список обновляется с выпуском каждой версии браузера Chrome, поэтому может пройти несколько месяцев, прежде, чем вы увидите, что ваш домен добавлен в него. Для подачи заявки нужно выполнить несколько требований, указанных на главной странице сайта, поэтому рекомендую прочитать ее внимательно. Значение имеет даже регистр параметров заголовка. В случае критической ошибки после нажатия на кнопку «Check status and eligibility» фон страницы станет красным, в случае некритической — желтым, если же все верно — зеленым. На этой же странице указано, что нужно делать, чтобы удалить свой домен из этого списка.&lt;/p&gt;
&lt;p&gt;В принципе, это все, что вам нужно знать об этой технологии защиты вашего сайта. Надеюсь, что этот текст вам помог.&lt;/p&gt;
</description>
</item>


</channel>
</rss>