知识待整理
慢攻击(http)
对暴露的端口发起slowhttp攻击导致系统拒绝服务
*慢速攻击原理:*
http慢速攻击是利用http合法机制,在建立连接后,尽量长时间保持连接,不释放,达到对HTTP服务攻击,攻击者发送POST请求,自行构造报文向服务器提交数据,将报文长度设置一个很大的值,且在随后每次发送中,每次只发送一个很小的报文,这样导致服务器一直等待数据,连接始终一直被占用。
如果攻击者使用多线程或傀儡机子去做同样操作,服务器WEB容器很快就被占满TCP连接而不再接受新请求
解决办法:
1.使用NGINX,因为其本身就对慢速攻击有很好防护
2.tomcat可通过运行模式NIO和connectionTimeout值进行缓解
t-io
- 依赖:tools : hutool
Undertow
- 和netty都是JBoss开源的,JBoss被redhat收购了
- undertow 架构类似于Jetty,采用应用内嵌的方式
- 底层基于XNIO
MongoDB
like %query% : db.getCollection('HistoryTdRunData_2020_12').find({"regCode" :/ROSEA10045/})
like query% : db.getCollection('HistoryTdRunData_2020_12').find({"regCode" :/^ROSEA10045/})
= : db.getCollection('HistoryTdRunData_2020_12').find({"regCode" :"748865688ROSEA10045000000000})
//根据ObejctId进行时间范围查询
db.HistoryTdRunData_2021_04.find({
deviceId: "f8670acb-c122-4512-af13-79b485d117a0",
_id: ObjectId("60649c8046e0fb02648290d1")
});
db.HistoryTdRunData_2021_04.find({
deviceId:"f8670acb-c122-4512-af13-79b485d117a0",
_id:{
'$gt': ObjectId('60649c800000000000000000'),
'$lt': ObjectId('60649d800000000000000000')
}
}).projection({})
.sort({_id:-1})
.limit(3)
db.HistoryTdRunData_2021_06.find({
$or: [
{ regCode: "7488656883400BFRFP5000000000" ,
deviceId: "b085a806-a347-4f2c-8989-916a08fd6c50"
}
// { regCode: "748865688VY0076S4J9000000000" },
// ,{ deviceId: "b085a806-a347-4f2c-8989-916a08fd6c50"}
],updateDay:"2021-06-07"
});
管理工具NoSQLBooster
https://www.jianshu.com/p/60b666ce420d
-
破解
## 安装工具 npm install asar -g ## 进入app资源目录 cd ~/AppData/Local/Programs/nosqlbooster4mongo/resources ## 解压抽取资源 asar extract app.asar app ## 修改试用期时长 修改 shared\lmCore.js MAX_TRIAL_DAYS=3000 并把 return MAX_TRIAL_DAYS < f ? MAX_TRIAL_DAYS : f 改成 return MAX_TRIAL_DAYS ## 重新打包 asar pack app app.asar ## 重启看效果
synchronized & @transactional
// 原因在于事务的范围比synchronized范围大,当锁释放了才会提交事务,在这期间就有可能别的线程读取到任务去执行
正则表达式
先行断言(lookahead)和后行断言(lookbehind)
(?=pattern) 零宽正向先行断言(zero-width positive lookahead assertion)
- 代表字符串中的一个位置,紧接该位置之后的字符序列能够匹配pattern
(?!pattern) 零宽负向先行断言(zero-width negative lookahead assertion)
- 代表字符串中的一个位置,紧接该位置之后的字符序列不能匹配pattern。
(?<=pattern) 零宽正向后行断言(zero-width positive lookbehind assertion)
- 代表字符串中的一个位置,紧接该位置之前的字符序列能够匹配pattern
(?<!pattern) 零宽负向后行断言(zero-width negative lookbehind assertion)
-
先行断言和后行断言某种程度上就好比使用if语句对匹配的字符前后做判断验证。
- 理解成时机 先行代表正预测 ,后发代表 回顾
* 正预测,这个很好理解,就是表示这个表达式是一种预测,预测接下来会发生的情况。最后,先行断言,意即提前确定。结合起来,就是:我断言,在我所在的位置后面,必然要出现我所表达的东西 xxx(?=预测会出现)
* 后发回顾:可以理解成 从前到后匹配 在我所在的位置前面(已经遍历过的回溯)出现过(pattern) (?<=出现过)xxx - 正向=代表包含,负向 !表示不包含
- 如同^代表开头,$代表结尾,\b代表单词边界一样,先行断言和后行断言也有类似的作用,它们只匹配某些位置,在匹配过程中,不占用字符,所以被称为“零宽”。所谓位置,是指字符串中(每行)第一个字符的左边、最后一个字符的右边以及相邻字符的中间(假设文字方向是头左尾右)。
- 理解成时机 先行代表正预测 ,后发代表 回顾
-
@Test public void testSmsContent(){ String content = "施耐迪尔机械设备销售有限公司下的型号为FFAFASCR60EPM,编号为xxxZSW838803,名称为deviceName的空压机,在2020-12-11 10:30:31时间左右,产生了排气温度预警的告警。" ; logger.error("return Params:{}", JSON.toJSONString(getParams(content),true)); } private Map<String, Object> getParams(String content) { Map<String, Object> params = new HashMap<>(); String regModel = "(?<=型号为)((?!,)\\S){1,50}(?=,)"; String regDeviceNo = "(?<=编号为)((?!,)\\S){1,50}(?=,)"; String regDeviceName = "(?<=名称为)\\S{1,50}(?=的空压机)"; String regTime = "(?<=在)[\\d -:]{19}?"; String regFaultName = "(?<=产生了)\\S{1,25}(?=的)"; String regFaultType = "(?<=的)\\S{2}(?=。)"; String regCompanyName = "^\\S{1,50}(?=下的)"; params.put("no", RegexUtil.find(content,regDeviceNo)); params.put("modelName", RegexUtil.find(content,regModel)); params.put("createTime", RegexUtil.find(content,regTime)); params.put("faultName", RegexUtil.find(content,regFaultName)); params.put("faultType", RegexUtil.find(content,regFaultType)); params.put("deviceName", RegexUtil.find(content,regDeviceName)); params.put("companyName", RegexUtil.find(content,regCompanyName)); return params; } -
强密码
/^(?=^.{8,}$)(?=.*\d)(?=.*\W+)(?=.*[A-Z])(?=.*[a-z])(?!.*\n).*$/ /* 这个看起来比较复杂,是一个js群里的人发的,一个十分巧妙的正则。不过,分解开来其实一点也不复杂,这是由五个零宽断言和一个负向零宽断言(负向表否定)组成。前五个分别是: 必须是8位以上、 必须出现数字、 必须出现特殊符号(非字母数字下划数)、 必须出现大写字母、 必须出现小写字母。 最后一个负向零宽断言是:不得出现换行。 大家会发现每个断言都是以 .* 开头,那这个表示什么意思呢? 因为这些断言都是写在同一位置,而同一位置是不可能同时出现以上六种情况的。所以用 .* 来告诉表达式,这个断言之前可以有字符(意即这个断言可以出现在接下来的字符串任何位置)。 那么这条正则表达式有什么作用呢?有做过密码验证的同学马上就反应过来了,这可以用来做强密码验证。*/
术语
- CDI
Java EE的上下文和依赖注入(Contexts and Dependency Injection for Java EE,CDI)

浙公网安备 33010602011771号