mirror of
https://gitee.com/pan648540858/wvp-GB28181-pro.git
synced 2026-06-29 21:47:50 +08:00
Compare commits
4 Commits
e3e4871b9e
...
f1df4f4be8
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f1df4f4be8 | ||
|
|
6f1f8d0d60 | ||
|
|
02ab74dbae | ||
|
|
c011389c3f |
@ -29,6 +29,7 @@ import java.util.concurrent.ConcurrentHashMap;
|
|||||||
import java.util.concurrent.DelayQueue;
|
import java.util.concurrent.DelayQueue;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import static com.genersoft.iot.vmp.gb28181.utils.XmlUtil.getInteger;
|
||||||
import static com.genersoft.iot.vmp.gb28181.utils.XmlUtil.getText;
|
import static com.genersoft.iot.vmp.gb28181.utils.XmlUtil.getText;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -81,7 +82,8 @@ public class PresetQueryResponseMessageHandler extends SIPRequestProcessorParent
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int num = Integer.parseInt(presetListNumElement.attributeValue("Num"));
|
Integer sumNum = getInteger(rootElement, "SumNum");
|
||||||
|
int num = sumNum == null ? Integer.parseInt(presetListNumElement.attributeValue("Num")) : sumNum.intValue();
|
||||||
List<Preset> presetQuerySipReqList = new ArrayList<>();
|
List<Preset> presetQuerySipReqList = new ArrayList<>();
|
||||||
if (num > 0) {
|
if (num > 0) {
|
||||||
for (Iterator<Element> presetIterator = presetListNumElement.elementIterator(); presetIterator.hasNext(); ) {
|
for (Iterator<Element> presetIterator = presetListNumElement.elementIterator(); presetIterator.hasNext(); ) {
|
||||||
|
|||||||
@ -205,6 +205,21 @@ public class SipUtils {
|
|||||||
|
|
||||||
public static Gb28181Sdp parseSDP(String sdpStr) throws SdpParseException {
|
public static Gb28181Sdp parseSDP(String sdpStr) throws SdpParseException {
|
||||||
|
|
||||||
|
// 校验:拦截空内容与注入攻击特征
|
||||||
|
if (sdpStr == null || sdpStr.trim().isEmpty()) {
|
||||||
|
throw new SdpParseException(0, 0, "SDP内容为空");
|
||||||
|
}
|
||||||
|
// 标准SDP每行格式固定为 "x=value",不存在SQL关键字;出现则视为注入攻击
|
||||||
|
String sdpUpper = sdpStr.toUpperCase();
|
||||||
|
if (sdpUpper.contains("' OR '") || sdpUpper.contains("' OR 1") || sdpUpper.contains(" OR 1=1")
|
||||||
|
|| sdpUpper.contains("--") || sdpUpper.contains("/*") || sdpUpper.contains("*/")
|
||||||
|
|| sdpUpper.contains("DROP ") || sdpUpper.contains("INSERT ") || sdpUpper.contains("UPDATE ")
|
||||||
|
|| sdpUpper.contains("DELETE ") || sdpUpper.contains("UNION ") || sdpUpper.contains("SELECT ")) {
|
||||||
|
log.error("[SDP注入攻击] 检测到非法SDP内容,已拒绝解析,内容长度: {}", sdpStr.length());
|
||||||
|
throw new SdpParseException(0, 0, "非法SDP内容");
|
||||||
|
}
|
||||||
|
//校验结束
|
||||||
|
|
||||||
// jainSip不支持y= f=字段, 移除以解析。
|
// jainSip不支持y= f=字段, 移除以解析。
|
||||||
int ssrcIndex = sdpStr.indexOf("y=");
|
int ssrcIndex = sdpStr.indexOf("y=");
|
||||||
int mediaDescriptionIndex = sdpStr.indexOf("f=");
|
int mediaDescriptionIndex = sdpStr.indexOf("f=");
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user