предисловие
В последнее время проекту необходимо предоставить внешний интерфейс для предоставления доступа к общедоступным доменным именам, а интерфейс связан с заказами транзакций, поэтому безопасность очень важна; вот некоторые часто используемые меры безопасности и способы их реализации.
меры предосторожности
Лично я считаю что меры безопасности в основном в двух аспектах.С одной стороны как обеспечить безопасность данных в процессе передачи.С другой стороны данные дошли до серверной части.Посмотрите какие меры безопасности на месте.
1. Шифрование данных
Мы знаем, что данные легко захватить во время процесса передачи. Если прямая передача, такая как передача HTTP-протокола, данные, передаваемые пользователем, могут быть получены любому; поэтому данные зашифрованы, и общая практика зашифрована Ключевые поля, такие как пользователи. такие как пользователи. Пароль зашифрован непосредственно на MD5; теперь основной является использование протокола HTTPS, добавить слой шифрования слоя (SSL) между HTTP и TCP, который отвечает за шифрование данных и дешифрование;
2. Подпись данных
Подписание данных — это цифровая строка, сгенерированная отправителем, которую нельзя подделать, чтобы гарантировать, что данные не будут подделаны во время передачи; вы можете спросить, если данные были зашифрованы с помощью https, обязательно ли их подписывать? Данные шифруются при передаче.Теоретически, даже если пакет будет перехвачен, данные не могут быть подделаны, но мы должны знать, что зашифрованная часть фактически находится только во внешней сети.Сейчас многим сервисам нужно пройти через множество сервисных прыжков во внутренней сети, поэтому подпись здесь может предотвратить подделку данных во внутренней сети;
3. Механизм отметки времени
Данные легко захватить, но после вышеуказанной обработки шифрования и подписи настоящие данные не видны, даже если данные получены; однако некоторые нарушители закона не заботятся о реальных данных, а напрямую получают захваченные данные Пакет делает злонамеренный запрос; в это время вы можете использовать механизм временных меток, чтобы добавить текущее время к каждому запросу, и сервер получит текущее время и вычтет время в сообщении, чтобы увидеть, находится ли оно в фиксированном диапазоне времени, Например, 5 В течение минут; такой злонамеренно запрошенный пакет данных не может изменить время внутри, поэтому он будет считаться незаконным запросом через 5 минут;
4. Механизм AppId
Большинство веб-сайтов в основном требуют имя пользователя и пароль для входа в систему. Не каждый может использовать мой веб-сайт. Это на самом деле механизм безопасности, соответствующий внешний интерфейс действительно нуждается в таком механизме, и не каждый может его вызвать. пользователь, которому необходимо использовать интерфейс, должен активировать appid в фоновом режиме и предоставить пользователю соответствующий ключ; в вызываемом интерфейсе необходимо предоставить appid+key, и сервер выполнит соответствующую проверку;
5. Механизм ограничения тока
Первоначально это был реальный пользователь, и appid был активирован, но интерфейс вызывался часто; в этом случае соответствующий appid должен быть ограничен в текущем потоке, а часто используемые алгоритмы ограничения тока включают в себя ведро с токенами и дырявое ведро алгоритмы;
6. Механизм черного списка
Если этот аппид совершил много нелегальных операций, или есть специальная система черно-белых, то после анализа аппид сразу попадет в черный список, а все запросы сразу вернут код ошибки;
7. Проверка достоверности данных
Можно сказать, что это механизм обработки, который будет иметь каждая система, и обработка данных будет осуществляться только тогда, когда данные являются законными; каждая система имеет свои собственные правила проверки, и, конечно, могут быть некоторые рутинные правила, такие как ID длина и состав карточек, длина и состав телефонных номеров и т. д.;
Как добиться
Выше, как правило, представлены некоторые общие меры безопасности интерфейса, конечно, может быть и другой способ, которого я не знаю, я надеюсь, что каждый может добавить, посмотрите на эти меры метода, как реализовать;
1. Шифрование данных
В настоящее время основными методами шифрования являются симметричное шифрование и асимметричное шифрование;
Симметричное шифрование: Симметричный ключ использует один и тот же ключ в процессе шифрования и дешифрования.Распространенные алгоритмы симметричного шифрования включают DES и AES;преимущество в том, что скорость вычислений высокая, но недостатком является то, что отправитель и получатель должны согласовать перед передачей данных. Секретный ключ, и тогда обе стороны могут сохранить секретный ключ.Если секретный ключ одной стороны просочится, зашифрованная информация не будет в безопасности;
Асимметричное шифрование: Сервер будет генерировать пару клавиш, закрытый ключ хранится на сервере, и открытый ключ может быть освобожден никому; преимущество в том, что он является более безопасным, чем симметричное шифрование, но скорость шифрования и дешифровки много медленнее, чем у симметричного шифрования; широко используется алгоритм RSA;
Существуют преимущества и недостатки двух способов, в то время как HTTPS реализуется в сочетании с двумя методами шифрования, объединяя преимущества обеих сторон, лучше с точки зрения безопасности и производительности;
Симметричное шифрование и реализация кода асимметричного шифрования, jdk предоставляет соответствующие классы инструментов, которые можно использовать напрямую, но я не буду вводить здесь слишком много;
Как настроить и использовать https относительно сложно, вы можете обратиться к моей предыдущей статье.Анализ и практика HTTPS
2. Подпись данных
Алгоритм md5 в основном используется для подписи данных.Отправляемые данные каким-то образом объединяются в строку, а затем с помощью md5 генерируется зашифрованная строка.Эта зашифрованная строка является подписью пакета данных.Вы можете увидеть простой пример:
str:参数1={参数1}&参数2={参数2}&……&参数n={参数n}$key={用户密钥};
MD5.encrypt(str);
Обратите внимание, что последний пользовательский ключ, клиент и сервер имеют один, который будет безопаснее;
3. Механизм отметки времени
После проверки подлинности расшифрованных данных с помощью подписи мы получаем поле метки времени клиента в пакете данных, а затем вычитаем время клиента из текущего времени сервера, чтобы увидеть, находится ли результат в интервале.Псевдокод выглядит следующим образом:
long interval=5*60*1000;//超时时间
long clientTime=request.getparameter("clientTime");
long serverTime=System.currentTimeMillis();
if(serverTime-clientTime>interval){
return new Response("超过处理时长")
}
4. Механизм AppId
Достаточно сгенерировать уникальный AppId, а ключ может быть сгенерирован случайным образом с использованием специальных символов, таких как буквы и цифры; чтобы сгенерировать уникальный AppId, зависит от реальной ситуации, должен ли он быть глобально уникальным; но является ли он глобально уникальным или нет, лучше всего, чтобы сгенерированный идентификатор имел следующие атрибуты:
возрастающая тенденция: Таким образом, при сохранении базы данных производительность использования индекса выше;
информационной безопасности: Старайтесь не непрерывно, легко открыть для себя закон;
Обычно используемые методы для создания глобально уникальных идентификаторов — это методы, подобные снежинкам;
5. Механизм ограничения тока
Обычно используемые алгоритмы ограничения тока включают: ограничение тока корзины маркеров, ограничение тока дырявой корзины и ограничение тока счетчика;
1. Ограничение текущего сегмента токенов
Принцип работы алгоритма корзины токенов заключается в том, что система помещает токены в корзину с определенной скоростью, и сбрасывает токен, когда она наполняется, при поступлении запроса токен сначала удаляется из корзины, и если токен может может быть получен, запрос может продолжать выполняться. , в противном случае подождите или откажите в обслуживании; корзина маркеров допускает определенную степень пакетного трафика, пока есть токены, он может быть обработан, и несколько токенов поддерживаются одновременно ;
2. Ограничение тока дырявого ведра
Принцип алгоритма дырявого ведра заключается в том, чтобы поток запросов с фиксированной постоянной скоростью, а скорость входящих запросов является произвольной Когда количество запросов превышает емкость ведра, новый запрос ожидает или отказывается от обслуживания; это может быть видно, что алгоритм дырявого ведра может принудительно ограничивать скорость передачи данных;
3. Ограничение противотока
Счетчик представляет собой относительно простой и грубый алгоритм, который в основном используется для ограничения общего параллелизма, такого как пулы соединений с базой данных, пулы потоков и всплески.
Основываясь на том, как реализован описанный выше алгоритм, Guava предоставляет класс инструментов RateLimiter, основанный на алгоритме корзины токенов:
RateLimiter rateLimiter = RateLimiter.create(5);
Приведенный выше код указывает, что в одну секунду разрешено обрабатывать только пять одновременных запросов.Вышеупомянутый метод может использоваться только для ограничения тока запроса одного приложения и не может выполнять полное ограничение тока; в настоящее время требуется распределенное ограничение тока. , который можно реализовать на основе redis+lua;
6. Механизм черного списка
Мы не будем обсуждать, как и зачем здесь черный список, мы можем установить состояние для каждого пользователя, такое как: инициализированное состояние, нормальное состояние, средне-черное состояние, закрытое состояние и т. д., или мы можем напрямую сохранить черный список через центр распределенной конфигурации.List, каждый раз проверяйте, есть ли он в списке;
7. Проверка достоверности данных
Проверка законности включает в себя: плановую проверку и проверку бизнеса;
Обычная проверка: включая проверку подписи, требуемую проверку, проверку длины, проверку типа, проверку формата и т. д.;
Проверка бизнеса: это зависит от фактического бизнеса, например, сумма заказа не может быть меньше 0;
Суммировать
В этой статье описываются несколько общих мер безопасности, в том числе: шифрование данных, подпись данных, механизм временных меток, механизм AppId, текущий механизм ограничения, механизм черного списка и проверка легитимности данных; конечно, должны быть и другие методы, которые можно добавить.