抵禦惡意http攻擊,使用redis製作一個簡單的防禦
一、原理和思路
二、程式步驟
1.引入依賴和配置redis
<!--redis 依賴--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency>#redis配置spring.redis.host = ...spring.redis.port = ... [預設6379]spring.redis.password = [如果你的redis伺服器有密碼]
2.自定義redis的序列化器和RedisTemplate
2.1.序列化器
@Overridepublic byte[] serialize(@Nullable Integer integer) throws SerializationException {return integer== null ? null : integer.toString().getBytes(StandardCharsets.UTF_8);}@Overridepublic Integer deserialize(@Nullable byte[] bytes) throws SerializationException {return bytes == null ? null : Integer.valueOf(new String(bytes,StandardCharsets.UTF_8));}
2.2.RedisTemplate
@Configurationpublic class RedisConfig {@AutowiredRedisSerializer<Integer> intRedisSerializer;@Bean("intRedisTemplate")public RedisTemplate<String, Integer> IntRedisTemplate(RedisConnectionFactory rcf){RedisTemplate<String, Integer> re = new RedisTemplate();re.setConnectionFactory(rcf);re.setKeySerializer(new StringRedisSerializer());re.setValueSerializer(intRedisSerializer);return re;}}
3.偵探類實現檢測http攻擊的核心功能
@Component("httpDetective")public class HttpDetectiveImpl implements HttpDetective {@Autowiredprivate RedisTemplate<String, Integer> intRedisTemplate;/**單位均為毫秒*/private final int RECORD_TIME = 1000;private final int ALLOW_TIMES = 6;private final int REFUSE_TIME = 180000;@Overridepublic boolean inspection(String ip) {Integer times = intRedisTemplate.opsForValue().get(ip);if(times == null){System.out.println("有正常人進入");intRedisTemplate.opsForValue().set(ip, 1, RECORD_TIME, TimeUnit.MILLISECONDS);return true;}else{if(times >= ALLOW_TIMES){System.out.println("認定為入侵行為 攔截訪問 並且禁止目標短時間內再次訪問並且記錄 入侵者ip"+ ip);intRedisTemplate.opsForValue().set(ip, ALLOW_TIMES, REFUSE_TIME, TimeUnit.MILLISECONDS);return false;}else{System.out.println("有可疑人進入. "+times);intRedisTemplate.opsForValue().increment(ip);return true;}}}}
4.攔截器中掛載該偵探類,實現http攔截檢測
4.1 自定義攔截器
@AutowiredHttpDetective httpDetective;@Beanpublic HandlerInterceptor visitorRegistration(){return new HandlerInterceptor(){@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {return httpDetective.inspection(request.getRemoteAddr());}};}
4.3 在springboot中註冊攔截器
@Configurationpublic class WebMvcConfig implements WebMvcConfigurer {@ResourceHandlerInterceptor visitorRegistration;@Overridepublic void addInterceptors(InterceptorRegistry registry) {System.out.println("新增攔截器");// TODO Auto-generated method stubregistry.addInterceptor(visitorRegistration)// 攔截路勁.addPathPatterns("/**");}}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69984164/viewspace-2731701/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何防禦惡意流量攻擊(CC、DDoS)?
- 防止惡意攻擊,伺服器DDoS防禦軟體科普伺服器
- 伺服器防禦流量攻擊的簡單方法!伺服器
- 什麼是無檔案惡意軟體攻擊?如何防禦?
- 如何成功抵禦DOS攻擊?教你4個方法!
- CSRF 攻擊與防禦
- WEB攻擊與防禦Web
- CSRF攻擊與防禦
- JeecgBoot抵禦XSS攻擊實現方案boot
- Java HTTP Host 頭攻擊原理以及如何防禦JavaHTTP
- Jenkins如何使用CrumbIssuer防禦CSRF攻擊Jenkins
- DDoS攻擊的危害是什麼?如何抵禦?
- CSS keylogger:攻擊與防禦CSS
- 透過nginx配置檔案抵禦攻擊Nginx
- DDoS攻擊、CC攻擊的攻擊方式和防禦方法
- DDOS伺服器防禦的方法有哪些,如何防禦DDOS攻擊伺服器
- WMI 的攻擊,防禦與取證分析技術之防禦篇
- CC攻擊包括幾個階段?如何防禦CC攻擊?
- 如何有效防禦DDoS攻擊和CC攻擊?
- 【知識分享】伺服器遭受攻擊的方式,如何抵禦攻擊?伺服器
- 淺談DDos攻擊與防禦
- 網站被攻擊如何防禦網站
- cc攻擊防禦解決方法
- 高防伺服器主要防禦的攻擊伺服器
- 如何使用Linux命令來防禦網路攻擊?Linux
- 抵禦勒索攻擊,戴爾科技構築三位一體的終極防線
- 什麼是SSRF攻擊?如何防禦SSRF攻擊?
- 什麼是CSRF攻擊?如何防禦CSRF攻擊?
- 【知識分享】 伺服器抵禦ddos攻擊的方法伺服器
- Akamai淺談網路攻擊的防禦AI
- DDoS攻擊的手段有哪些?如何防禦?
- 什麼是中間人攻擊?如何抵禦中間人攻擊?
- 大促活動如何抵禦大流量 DDoS 攻擊?
- XXE攻擊攻擊原理是什麼?如何防禦XXE攻擊?
- DDOS攻擊原理,種類及其防禦
- 跨域攻擊分析和防禦(中)跨域
- 伺服器如何防禦CC攻擊伺服器
- DevOps 團隊如何防禦 API 攻擊devAPI