Кэш треппинг что это
В настоящее время наличные деньги уходят в прошлое. Уже большинство из нас получают зарплату на банковские карты. Это можно легко объяснить: государству удобно отслеживать передвижение денежных масс от работодателей к работникам, банкам выгодно, потому-что они получают за это неплохой процент. Нам от этого тоже сплошные плюсы: участникам зарплатных проектов более выгодные условия кредитования (упрощенное получение, более низкие ставки), избавились от лишнего веса мелочи, онлайн банкинг.
Таким образом, со всем немного, и мы забудем про бумажные железные деньги. Есть еще один плюс, похитив нашу карту из сумки в метро, грабителю будет не так просто распорядится нашими деньгами, как если бы был похищен кошелек с наличностью. Но не все так хорошо, в карточном деле воровство выходит на другой, более высокий уровень, и в чем то расстаться с деньгами становится еще легче, чем если бы с наличностью.
В этой статье я попытаюсь рассказать, о самых распространенных видах мошенничествах в пластике, поразмышляю что еще может сделать банк, для того чтобы обезопасить своих клиентов, и поделюсь советами, как обезопасить себя.
И так, начнем с основного вида мошенничества:
Кэш жёсткого диска
Жёсткие диски (HDD, Hard Disk Drive), применяемые для постоянного хранения данных — это, в сравнении с оперативной памятью, предназначенной для кратковременного хранения информации, устройства довольно медленные. Однако надо отметить, что скорость постоянных хранилищ информации увеличивается благодаря распространению твердотельных накопителей (SSD, Solid State Drive).
В системах долговременного хранения информации кэш диска (его ещё называют буфером диска или кэширующим буфером) — это встроенная в жёсткий диск память, которая играет роль буфера между процессором и физическим жёстким диском.
Кэш жёсткого диска
Дисковые кэши работают, исходя из предположения, что когда на диск что-то пишут, или с него что-то читают, есть вероятность того, что в ближайшем будущем к этим данным будут обращаться снова.
3. Принудительное кэширование. @CachePut
Бывают ситуации, когда мы хотим кэшировать возвращаемое значение для какой-то сущности, но в то же время, нам нужно обновить кэш. Для таких нужд существует аннотация @CachePut. Оно пропускает приложение в метод, при этом, обновляя кэш для возвращаемого значения, даже если оно уже закэшировано.
Добавим пару методов, в которых мы будем сохранять юзера. Один из них мы пометим обычной аннотацией @Cacheable, второй — @CachePut.
По той логике, которая уже описывалась, при первом сохранении пользователя с именем «Vasya» через метод createOrReturnCached() далее мы будем получать кэшированную сущность, при этом, в сам метод приложение заходить не будет. Если же мы вызовем метод createAndRefreshCache(), кэшированная сущность для ключа с именем «Vasya» перезапишется в кэше. Выполним тест и посмотрим, что будет выведено в консоль.
Мы видим, что user1 благополучно записался в базу и кэш. При повторной попытке записать юзера с таким же именем мы получаем закэшированный результат выполнения первого обращения (user2, для которого id такой же, как у user1, что говорит нам о том, что юзер не был записан, и это просто кэш). Далее, мы пишем третьего пользователя через второй метод, который даже при имеющемся закэшированном результате всё равно вызвал метод и записал в кэш новый результат. Это user3. Как мы видим, у него уже новый id. После чего, мы вызываем первый метод, который берёт новый кэш, добавленный user3.
▍Шлюзы
Шлюз (gateway) — это прокси-сервер, который перенаправляет входящие запросы или исходящие ответы, не модифицируя их. Такие прокси-серверы ещё называют туннелирующими прокси (tunneling proxy), веб-прокси (web proxy), прокси (proxy), или прокси уровня приложения (application level proxy). Эти прокси-серверы обычно совместно используются, например, всеми клиентами, находящимися за одним и тем же файрволом, что делает их хорошо подходящими для кэширования запросов.
7. Настройка кэша. Время жизни, максимальный размер и проч.
Для этого нам потребуется довольно популярная библиотека Google Guava. Я взял последнюю.
При создании кэш-менеджера переопределим метод createConcurrentMapCache, в котором вызовем CacheBuilder от Guava. В процессе нам будет предложено настроить кэш-менеджер при помощи инициализации следующих методов:
- maximumSize — максимальный размер значений, которые может содержать кэш. При помощи этого параметра можно найти попытаться найти компромисс между нагрузкой на базу данных и на оперативную память JVM.
- refreshAfterWrite — время после записи значения в кэш, после которого оно автоматически обновится.
- expireAfterAccess — время жизни значения после последнего обращения к нему.
- expireAfterWrite — время жизни значения после записи в кэш. Именно этот параметр мы определим.
Определим в менеджере время жизни записи. Чтобы долго не ждать, выставим 1 секунду.
Напишем соответствующий такому случаю тест.
Мы сохраняем несколько значений в базу данных, причём, если данные закэшированы, мы ничего не сохраняем. Сначала мы сохраняем два значения, потом ожидаем 1 секунду, пока кэш не протухнет, после чего, сохраняем ещё одно значение.
Логи показывают, что сначала мы создали юзера, потом попытались ещё одного, но поскольку данные были закэшированы, мы получили их из кэша (в обоих случаях — при сохранении и при получении из базы). Потом протух кэш, о чём сообщает нам запись о фактическом сохранении и фактическом получении юзера.
0. Создание проекта
Мы создадим очень простой проект, в котором мы сможем брать сущность из базы данных. Я добавил в проект Lombok, Spring Cache, Spring Data JPA и H2. Хотя, вполне можно обойтись только Spring Cache.
У нас будет только одна сущность, назовём её User.
Добавим репозиторий и сервис:
Когда мы заходим в сервисный метод get(), мы пишем об этом в лог.
Подключим к проекту Spring Cache.
Процессорный кэш
Начнём наш разговор о кэшах с самого низкого уровня — с процессора. Кэш-память процессора — это очень быстрая память, которая играет роль буфера между процессором (CPU) и оперативной памятью (RAM). Кэш-память хранит данные и инструкции, к которым обращаются чаще всего, благодаря чему процессор может получать ко всему этому доступ практически мгновенно.
В процессорах имеется особая память, представленная регистрами процессора, которая обычно представляет собой небольшое хранилище информации, обеспечивающее крайне высокую скорость обмена данными. Регистры — это самая быстрая память, с которой может работать процессор, которая расположена максимально близко к остальным его механизмам и имеет небольшой объём. Иногда регистры называют кэшем нулевого уровня (L0 Cache, L — это сокращение от Layer).
У процессоров, кроме того, имеется доступ к ещё нескольким уровням кэш-памяти. Это — до четырёх уровней кэша, которые, соответственно, называются кэшами первого, второго, третьего, и четвёртого уровня (L0 — L4 Cache). То, к какому именно уровню относятся регистры процессора, в частности, будет ли это кэш нулевого или первого уровня, определяется архитектурой процессора и материнской платы. Кроме того, от архитектуры системы зависит то, где именно — на процессоре, или на материнской плате, физически расположена кэш-память разных уровней.
Структура памяти в некоторых новейших CPU
▍Прямые прокси-серверы
Прямой прокси-сервер (forward proxy, часто такие серверы называют просто proxy server) обычно устанавливается на стороне клиента. Веб-браузер, который настроен на использование прямого прокси-сервера, будет отправлять исходящие запросы этому серверу. Затем эти запросы будут перенаправлены на целевой сервер, расположенный в интернете. Одно из преимуществ прямых прокси заключаются в том, что они защищают данные клиента (однако, если говорить об обеспечении анонимности в интернете, безопаснее будет пользоваться VPN).
8. Подведу итог
Рано или поздно, разработчик сталкивается с необходимостью реализации кэширования в проекте. Я надеюсь, что эта статья поможет Вам разобраться в предмете и смотреть на вопросы кэширования смелее.
Ник Карник, автор материала, перевод которого мы сегодня публикуем, предлагает поговорить о роли кэширования в производительности веб-приложений, рассмотрев средства кэширования разных уровней, начиная с самого низкого. Он обращает особое внимание на то, где именно могут быть кэшированы данные, а не на то, как это происходит.
Мы полагаем, что понимание особенностей систем кэширования, каждая из которых вносит определённый вклад в скорость реакции приложений на внешние воздействия, расширит кругозор веб-разработчика и поможет ему в деле создания быстрых и надёжных систем.
Кэширование в браузере
Перед нами весьма полезная технология, которая даёт следующие преимущества всем участникам обмена данными:
- Улучшаются впечатления пользователя от работы с сайтом, так как ресурсы из локального кэша загружаются очень быстро. Во время получения ответа не входит время прохождения сигнала от клиента к серверу и обратно (RTT, Round Trip Time), так как запрос не уходит в сеть.
- Уменьшается нагрузка на серверное приложение и на другие серверные компоненты, ответственные за обработку запросов.
- Высвобождается некоторая часть сетевых ресурсов, которыми теперь могут воспользоваться другие пользователи интернета, экономятся средства на оплату трафика.
Кэширование в браузере
Кэширование баз данных
Усложним наш пример, добавим сюда базу данных. Запросы к базам данных могут быть медленными и требовать серьёзных системных ресурсов, так как серверу баз данных, для формирования ответа, нужно выполнять некие вычисления. Если запросы повторяются, кэширование их средствами базы данных поможет уменьшить время её отклика. Кроме того, кэширование полезно в ситуациях, когда несколько компьютеров работают с базой данных, выполняя одинаковые запросы.
Простой веб-сервер с базой данных
Большинство серверов баз данных по умолчанию настроены с учётом оптимальных параметров кэширования. Однако, существует множество настроек, которые могут быть модифицированы для того, чтобы подсистема баз данных лучше соответствовала особенностям конкретного приложения.
Ответы веб-сервера кэшируются в оперативной памяти. Кэш приложения может храниться либо локально, в памяти, либо на специальном кэширующем сервере, который использует базу данных, вроде Redis, которая хранит данные в оперативной памяти.
▍Веб-ускорители
Веб-ускоритель (web accelerator) — это прокси-сервер, который уменьшает время доступа к сайту. Он делает это, заранее запрашивая у сервера документы, которые, вероятнее всего, понадобятся клиентам в ближайшем будущем. Подобные серверы, кроме того, могут сжимать документы, ускорять выполнение операций шифрования, уменьшать качество и размер изображений, и так далее.
▍Пограничное кэширование
Обратные прокси-серверы расположены близко к серверам. Существует и технология, при использовании которой кэширующие серверы располагаются как можно ближе к потребителям данных. Это — так называемое пограничное кэширование (edge caching), представленное сетями доставки контента (CDN, Content Delivery Network). Например, если вы посещаете популярный веб-сайт и загружаете какие-нибудь статические данные, они попадают в кэш. Каждый следующий пользователь, запросивший те же данные, получит их, до истечения срока их кэширования, с кэширующего сервера. Эти серверы, определяя актуальность информации, ориентируются на серверы, хранящие исходные данные.
Прокси-серверы в инфраструктуре обмена данными между клиентом и сервером
4. Удаление из кэша. @CacheEvict
Иногда возникает необходимость жёстко обновить какие-то данные в кэше. Например, сущность уже удалена из базы, но она по-прежнему доступна из кэша. Для сохранения консистентности данных, нам необходимо хотя бы не хранить в кэше удалённые данные.
Добавим в сервис ещё пару методов.
Первый будет просто удалять пользователя, второй тоже будет его удалять, но мы пометим его аннотацией @CacheEvict. Добавим тест, который будет создавать двух юзеров, после чего, одного будет удалять через простой метод, а второго — через аннотируемый метод. После чего, мы достанем этих юзеров через метод get().
Логично, что раз наш юзер уже закэширован, удаление не помешает нам его как бы получить — ведь он закэширован. Посмотрим логи.
Мы видим, что приложение благополучно сходило оба раза в метод get() и Spring закэшировал эти сущности. Далее, мы удалили их через разные методы. Первый мы удалили обычным путём, и закэшированное значение осталось, поэтому когда мы попытались получить юзера под id 1, нам это удалось. Когда же мы попытались получить юзера 2, метод вернул нам EntityNotFoundException — такого юзера в кэше не оказалось.
Мемоизация функций
Сейчас поговорим об оптимизации производительности серверного приложения за счёт мемоизации. Это — разновидность кэширования, применяемая для оптимизации работы с ресурсоёмкими функциями. Данная техника позволяет выполнять полный цикл вычислений для определённого набора входных данных лишь один раз, а при следующих обращениях к функции с теми же входными данными сразу выдавать найденный ранее результат. Мемоизация реализуется посредством так называемых «таблиц поиска» (lookup table), хранящих ключи и значения. Ключи соответствуют входным данным функции, значения — результатам, которые возвращает функция при передаче ей этих входных данных.
Мемоизация функции с помощью таблицы поиска
Мемоизация — это обычный приём, используемый для повышения производительности программ. Однако он может быть не особенно полезным при работе с ресурсоёмкими функциями, которые вызываются редко, или с функциями, которые, и без мемоизации, работают достаточно быстро.
1. Кэширование возвращаемого результата
Что делает Spring Cache? Spring Cache просто кэширует возвращаемый результат для определённых входных параметров. Давайте это проверим. Мы поставим аннотацию @Cacheable над сервисным методом get(), чтобы кэшировать возвращаемые данные. Дадим этой аннотации название «users» (далее мы разберём, зачем это делается, отдельно).
Для того, чтобы проверить, как это работает, напишем простой тест.
Если над классом стоит своя аннотация @SpringBootTest, для такого класса каждый раз заново поднимается контекст. Поскольку контекст может подниматься 5 секунд, а может 40 секунд, это в любом случае очень сильно тормозит процесс тестирования. При этом, разницы в контексте обычно нет никакой, и при запуске каждой группы тестов в пределах одного класса нет необходимости заново запускать контекст. Если же мы ставим только одну аннотацию, скажем, над абстрактным классом, как в нашем случае, это позволяет поднимать контекст только один раз.
Поэтому я предпочитаю сокращать количество поднимаемых контекстов при тестировании/сборке, если это возможно.
Что делает наш тест? Он создаёт двоих юзеров и потом по 2 раза вытаскивает их из базы. Как мы помним, мы поместили аннотацию @Cacheable, которая будет кэшировать возвращаемые значения. После получения объекта из метода get() мы выводим объект в лог. Также, мы выводим в лог информацию о каждом посещении приложением метода get().
Запустим тест. Вот что мы получаем в консоль.
Как мы видим, первые два раза мы действительно сходили в метод get() и реально получили юзера из базы. Во всех остальных случаях, реального захода в метод не было, приложение брало закэшированные данные по ключу (в данном случае, это id).
Cash trapping
Суть данного мошенничества заключается в установке накладки на шатер. Вы запросив денежную сумму у банкомата, ждете пока он вам выдаст деньги, а они не выходят. Подождав некоторое время вы уходите, а мошенник подойдя к банкомату снимает накладку с вашими деньгами и уходит в неизвестном направлении. Данный вид кражи распространяется как на деньги, так и на карты.
Накладка с “уловом”
Раньше я боялся кэширования. Очень не хотелось лезть и выяснять, что это такое, сразу представлялись какие-то подкапотные люто-энтерпрайзные штуки, в которых может разобраться только победитель олимпиады по математике. Оказалось, что это не так. Кэширование оказалось очень простым, понятным и невероятно лёгким во внедрении в любой проект.
В данном посте я постараюсь объяснить о кэшировании так же просто, как это сейчас понимаю я. Вы узнаете о том, как внедрить кэширование за 1 минуту, как кэшировать по ключу, устанавливать время жизни кэша, и многие прочие штуки, которые необходимо знать, если Вам поручили закэшировать что-то в вашем рабочем проекте, и Вы не хотите ударить в грязь лицом.
Почему я говорю «поручили»? Потому что кэширование, как правило, есть смысл применять в больших, высоконагруженных проектах, с десятками тысяч запросов в минуту. В таких проектах, чтобы не перегружать базу, как правило, кэшируют обращения к репозиторию. Особенно если известно, что данные из какой-нибудь мастер-системы обновляются с некоторой периодичностью. Сами мы такие проекты не пишем, мы на них работаем. Если же проект маленький и перегрузки ему не грозят, тогда, конечно, лучше ничего не кэшировать — всегда свежие данные всегда лучше периодически обновляемых.
Обычно в обучающих постах докладчик сначала лезет под капот, начинает копаться в кишочках технологии, чем немало утомляет читателя, а уж потом, когда тот пролистал без дела добрую половину статьи и ничего не понял, повествует, как это работает. У нас всё будет иначе. Сначала мы делаем так, чтобы заработало, и желательно, с приложением наименьших усилий, а уж потом, если интересно, Вы сможете заглянуть под капот кэширования, посмотреть изнутри сам бин и тонко настроить кэширование. Но даже если Вы этого не сделаете (а это начинается с 6 пункта), Ваше кэширование будет работать и так.
Мы создадим проект, в котором разберём все те аспекты кэширования, которые я обещал. В конце, как обычно, будет ссылка на сам проект.
Скимминг аля шиминг
Скимминг наверное, самый легкий и быстрый способ отдать свои деньги чужим людям. Суть способа заключается в похищении данных с магнитных полос банковской карты, и похищение Пин-кодов посредством накладной клавиатуры или потайной видео камеры. Скимминг это болезнь 21 первого века, по данным независимых экспертных групп, в США каждый 7 человек пострадал от скимминга, в России подобные исследования не проводились, но как показывает практика, в больший регионах ( г. Москва, г. Санкт-Петербург, г. Екатеринбург и.т.д) шанс расстаться с деньгами, не меньше чем на западе.
Бывают два основных способа установки скиммера карт: непосредственно на банкомат, либо на вспомогательные считыватели, например контроллера управления дверью.
Установленный скиммер на банкомат Wincor:
Так он выглядит отдельно от банкомата
Суть устройства заключается в том, что карта проходя в отверстие картридера банкомата, вначале оставляет свои данные на скиммере, а уже потом попадает в банкомат. После этого есть 3 варианта действий: данные записываются на внутреннее хранилище скиммера, данные передаются по радио каналу злоумышленникам (которые в это время сидят в засаде) или данные передаются по GSM каналу. Все это зависит от типа используемого скиммера.
Для защиты от такого скиммеров используется пассивный и активный антискиминг. Пассивный антискиминг устанавливает перед картридером банкомата, тем самым заполняя нишу, потенциально доступную для установки скиммера. В ответ на эту защиту появился анти антискиминг, скиммер который устанавливается на штатную антискиминговую накладку.
Антискиминговая накладка установленная на банкомат NCR
Также на некоторых банкоматах используется активная антискиминговая защита, она генерирует электромагнитные помехи в области приема карты банкомата, тем самым забивая магнитную головку скиммера, но, не мешая штатному картридеру.
Скиммер устанавливаемый на антискиминговую накладку
В последнее время скиммеры стали устанавливать на контроллеры входа двери, в помещениях круглосуточной работы банкоматов. Мы обращаем внимание на картридер банкомата, но почему то никогда не смотрим там, где проводим картой возле двери. Причем скиммер устанавливают как поверх штатного контроллера, так и просто на стене, где и контроллера то и вовсе нет (дверь просто всегда открыта), а мы автоматически проводим картой, даже там где этого не нужно делать.
Считыватель контроллера Perco
Для похищения Пин-кодов используются накладки на клавиатуру или замаскированные видео камеры. В большинстве случаев накладки не имеют оттиска, в отличие от настоящей клавиатуры, что является хорошим индикатором установленного скимминга.
Накладка на клавиатуру банкомата Wincor
Скрытая камера, установленная в ящик с рекламой
Видеорегистратор установленный непосредственно на банкомат
6. Гибкая настройка. CacheManager
Наконец-то мы разобрались с кэшем, и он перестал быть для нас чем-то непонятным и страшным. Теперь давайте заглянем под капот и посмотрим, как мы можем настроить кэширование в целом.
Для таких задач существует CacheManager. Он существует везде, где есть Spring Cache. Когда мы добавили аннотацию @EnableCache, такой кэш менеджер автоматически будет создан Spring. Мы можем убедиться в этом, если заавтовайрим ApplicationContext и вскроем его на брейкпоинте. Среди прочих бинов, будет и бин «cacheManager».
Я остановил приложение на этапе, когда уже два юзера были созданы и помещены в кэш. Если мы вызовем нужный нам бин через Evaluate Expression, то мы увидим, что такой бин действительно есть, в нём есть ConcurentMapCache с ключом «users» и значением ConcurrentHashMap, в которой уже лежат закэшированные юзеры.
Мы, в свою очередь, можем создать свой кэш-менеджер, с хабром и программистами, после чего, тонко настроить его на наш вкус.
Осталось только выбрать, какой именно кэш-менеджер мы будем использовать, потому что их предостаточно. Я не буду перечислять все кэш-менеджеры, достаточно будет знать, что есть такие:
- SimpleCacheManager — самый простой кэш-менеджер, удобный для изучения и тестирования.
- ConcurrentMapCacheManager — лениво инициализирует возвращаемые экземпляры для каждого запроса. Также рекомендуется для тестирования и изучения работы с кэшем, а также, для каких-то простых действий, вроде наших. Для серьёзной работы с кэшем рекомендуются имплементации ниже.
- JCacheCacheManager, EhCacheCacheManager, CaffeineCacheManager — серьёзные кэш-менеджеры «от партнёров», гибко настраиваемые и выполняющие задачи очень широкого спектра действия.
Итак, досоздадим наш кэш-менеджер.
Наш кэш-менеджер готов.
О быстродействии жёстких дисков и оперативной памяти
Разница между временным хранением данных в оперативной памяти и постоянным хранением на жёстком диске проявляется в скорости работы с информацией, в стоимости носителей и в близости их к процессору.
Время отклика оперативной памяти составляет десятки наносекунд, в то время как жёсткому диску нужны десятки миллисекунд. Разница в быстродействии дисков и памяти составляет шесть порядков!
Одна миллисекунда равна миллиону наносекунд
5. Группировка настроек. @Caching
Иногда один метод требует нескольких настроек кэширования. Для этих целей используется аннотация @Caching. Выглядеть это может приблизительно так:
Это единственный способ группировать аннотации. Если Вы попытаетесь нагородить что-то вроде
то IDEA сообщит Вам, что так нельзя.
▍Обратные прокси-серверы
Обратный прокси-сервер (reverse proxy) — это обычно сервер, расположенный там же, где и веб-сервер, с которым он взаимодействует. Обратные прокси-серверы предназначены для предотвращения прямого доступа к серверам, расположенным в частных сетях. Обратные прокси используются для балансировки нагрузки между несколькими внутренними серверами, предоставляют возможности SSL-аутентификации или кэширования запросов. Такие прокси выполняют кэширование на стороне сервера, они помогают основным серверам в обработке большого количества запросов.
2. Объявление ключа для кэширования
Бывают ситуации, когда в кэшируемый метод приходит несколько параметров. В таком случае, бывает нужно определить параметр, по которому будет происходить кэширование. Добавим в пример метод, который будет сохранять в базу сущность, собранную по параметрам, но если сущность с таким именем уже есть, мы не будем её сохранять. Для этого мы определим параметр name как ключ для кэширования. Выглядеть это будет так:
Напишем соответствующий тест:
Мы попытаемся создать троих пользователей, для двоих из которых будет совпадать имя
и для двоих из которых будет совпадать email
В методе создания мы логируем каждый факт обращения к методу, а также, мы будем логировать все сущности, которые этот метод нам вернул. Результат будет таким:
Мы видим, что фактически приложение вызывало метод 3 раза, а заходило в него только два раза. Один раз для метода совпадал ключ, и он просто возвращал закэшированное значение.
Кэширование и прокси-серверы
В компьютерных сетях прокси-серверы могут быть представлены специальным аппаратным обеспечением или соответствующими приложениями. Они играют роль посредников между клиентами и серверами, хранящими данные, которые этим клиентам требуются. Кэширование — это одна из задач, которую они решают. Рассмотрим различные виды прокси-серверов.
Простой веб-сервер
Теперь, когда мы обсудили роль кэширования в базовых механизмах компьютерных систем, рассмотрим пример, иллюстрирующий применение концепций кэширования при взаимодействии клиента, представленного веб-браузером, и сервера, который, реагируя на запросы клиента, отправляет ему некие данные. В самом начале у нас имеется простой веб-сервер, который, отвечая на запрос клиента, считывает данные с жёсткого диска. При этом представим, что между клиентом и сервером нет никаких особых систем кэширования. Вот как это выглядит.
Простой веб-сервер
При работе вышеописанной системы, когда клиент обращается напрямую к серверу, а тот, самостоятельно обрабатывая запрос, читает данные с жёсткого диска и отправляет клиенту, без кэша всё-таки не обходится, так как при работе с диском будет задействован его буфер.
При первом запросе жёсткий диск проверит кэш, в котором, в данном случае, ничего не будет, что приведёт к так называемому «промаху кэша». Затем данные считаются с самого диска и попадут в его кэш, что соответствует предположению, касающемуся того, что эти данные могут понадобиться снова.
При последующих запросах, направленных на получение тех же данных, поиск в кэше окажется успешным, это — так называемое «попадание кэша». Данные в ответ на запрос будут поступать из дискового буфера до тех пор, пока они не будут перезаписаны, что, при повторном обращении к тем же данным, приведёт к промаху кэша.
Итоги
В этом материале мы рассмотрели различные уровни кэширования данных, применяющиеся в процессе обмена информацией между клиентом и сервером. Веб-приложения не могут мгновенно реагировать на воздействия пользователя, что, в частности, связано, для действий, требующих обмена данными с серверами этих приложений, с необходимостью выполнения неких вычислений перед отправкой ответа. Во время, необходимое для передачи данных от сервера клиенту, входит и время, необходимое для поиска необходимых данных на диске, и сетевые задержки, и обработка очередей запросов, и механизмы регулирования полосы пропускания сетей, и многое другое. Если учесть, что всё это может происходить на множестве компьютеров, находящихся между клиентом и сервером, то можно говорить о том, что все эти задержки способны серьёзно увеличить время, необходимое для прихода запроса на сервер и получения клиентом ответа.
Правильно настроенная система кэширования способна значительно улучшить общую производительность сервера. Кэши сокращают задержки, неизбежно возникающие при передаче данных по сети, помогают экономить сетевой трафик, и, в результате, уменьшают время, необходимое для того, чтобы браузер вывел запрошенную у сервера веб-страницу.
Рынок банковских услуг разрастается, словно снежный ком, несущийся с горной вершины, увлекая нас за собой. Еще совсем недавно банковская платежная карта, в обиходе называемая просто «пластиком», вызывала подозрительность и опаску. Сегодня она стала обычным платежным инструментом, заменив обычные бумажные деньги.
Несмотря на активность банковского рынка, избавиться от наличных денег вероятнее всего не получится, хотя некоторые специалисты и утверждают, что их жизнь подошла к черте заката. А раз наличные деньги пока еще остаются в обороте, то они будут продолжать привлекать внимание не только наше, но и тех, кто хочет обогатиться за наш счет.
Как же это происходит, если привычные купюры постепенно исчезают из наших кошельков? Исчезать они, конечно, исчезают, но совсем отказаться от них мы пока еще не готовы. Бумажные деньги нужны в транспорте, в некоторых магазинах, на рынках, да мало ли еще мест, куда не добрался банковский терминал – устройство для оплаты с использованием банковской карты.
Для получения наличных денег есть два способа. Первый — это касса. При получении денег через кассу все более или менее понятно. Если обладатель платежной карты внимателен, а кассир не заинтересован в обмане, беспокоиться не о чем.
Второй способ – банкомат. Здесь все несколько проще и одновременно сложнее. Проще в том, что деньги выдает не человек, а машина. И если она настроена правильно, то ошибка практически исключена. Сложность заключается все в том же отсутствии человека. Хоть банкомат и оснащен многочисленными системами защиты и охраны, все же злоумышленники находят способы посягательства на наши деньги. Один из таких способов называется «Cash Trapping».
Cash Trapping – ловушка для наличных (сash – наличные; trapping – заманивание в ловушку). Из всех существующих способов этот обескураживает своей простотой.
Итак, в чем же состоит суть этого метода? А все очень просто. В основе этого метода лежит накладка. Только в отличие от скимминга она устанавливается на «шторку» устройства выдачи денег, точнее сказать: закрывает его. Установка производится таким образом, что в точности повторяет конфигурацию банкомата. Отличительной особенностью этой накладки является закрепленный на внутренней поверхности двухсторонний скотч.
Как же он работает? В этой части есть некоторая особенность. Заключается она в том, что рассчитана только на ту часть операций, которые подразумевают получение наличных денег.
Cash Trapping нельзя назвать прибыльным, но, несмотря на это, злоумышленники им пользуются достаточно эффективно.
Cash Trapping примечателен еще и тем, что при использовании данного способа клиент не несет никаких убытков. Все расходы по недостаче ложатся на банк.
Количество случаев кеш-треппинга (перехвата наличных) в украинских банкоматах упало в 8 раз по сравнению с первым полугодием 2016 года. Об этом сообщает Украинская межбанковская ассоциация членов платежных систем ЕМА.
Однако, несмотря на значительное уменьшение случаев мошенничества, кеш-треппинг продолжает лидировать в перечне банкоматных преступлений в Украине.
В результате, клиент не может получить свои деньги, считая, что в работе банкомата произошел сбой. Но стоит пользователю отойти от банкомата, как появится мошенник, которые снимет планку вместе с приклеевшимися к ней наличными.
Признаки кеш-треппинга:
Чтобы преступники не украли деньги, следует оставаться рядом с банкоматом, не отходить от него. Позвонить в банк (номер телефона банка указан на банкомате или на банковской карте), сообщить о произошедшем и ждать указаний банковского работника.
К слову, преступники вешают свои планки так, чтобы их можно было без особых усилий снять. Так что и обычный пользователь способен это сделать – подергать за планку на отверстии для выдачи наличных.
Кроме того, украинские банки стали размещать антикештреппинговые накладки на «шторках» банкоматов, которые не позволяют мошенникам установить «свою» планку со скотчем.
Чаще всего злоумышленники орудуют в районах, где много людей пользуется банкоматом для снятия наличных. Это могут быть как места большого скопления людей (торгово-развлекательные центры, парки отдыха, транспортные развязки, банкоматы около крупных предприятий и бизнес-центров), так и магазины в спальных районах. Преступники выбирают дни, когда люди чаще снимают деньги – праздники, выходные, даты получения зарплаты и т.д.
При всей изобретательности мошенников, количество случаев кеш-треппинга сократилось с 468 до 66. Такой результат был достигнут в первую очередь благодаря таким факторам:
- Адекватная и быстрая реакция банков на опасность – установка антикештреппинговых накладок, которые применяют крупнейшие банки Украины;
- Масштабная информационная кампания против банкоматного мошенничества, благодаря чему пользователи знают признаки опасной ситуации и действуют соответственно (не отходят от банкомата, самостоятельно снимают планку с приклеевшимися к ней деньгами, звонят в банк и в полицию).
Статистика банкоматного мошенничества в первом полугодии 2017 года, поквартально:
Еще один вид банкоматного мошенничества – скимминг – остается на прежнем уровне (если сравнивать с показателями 2016 года). Зафиксировано 50 случаев установки скиммингового оборудования на банкоматах Украины за первое полугодие.
Скимминговое оборудование на кардридере может быть визуально заметно: потому большинство банков размещает на экране изображение банкомата (или только кардридера). Если в реальности кардридер отличается – такой банкомат использовать нельзя. Иногда скимминговое устройство бывает установлено глубоко внутри кардридера. Оборудование по типу «глубокая вставка» было найдено в банкоматах Киева дважды в течение минувшей зимы. Оба раза устройства оказались неисправны (что, однако, не означает, что злодеи не будут предпринимать дальнейшие попытки!). В такой кардридер карта заходит с трудом, что тоже опасный признак.
Случаи скимминга были зафиксированы в крупных городах Украины – Киеве и Одессе.
Наиболее действенным средством борьбы со скиммингом остается сокрытие ПИН-кода. Для этого следует прикрывать клавиатуру банкомата (рукой, сумкой, кошельком, кепкой и т.д.) во время введения ПИН. Не получив ПИН, преступники не смогут получить и доступ к карте-дубликату (и доступ к карточному счету жертвы).
Увы, по сравнению с показателями годичной давности, количество случаев Transaction Reversal Fraud (TRF) выросло в 10 раз (с 2 до 20)! TRF – это вид мошенничества, когда злоумышленник механическим способом вызывает сбой в работе банкомата и достает из него деньги.
Читайте также: