@@ -18,10 +18,13 @@ public class SafeDomainParser {
1818
1919 public SafeDomainParser (){
2020
21- String safeTag = "safedomain" ;
22- String domainSafeTag = "domain" ;
23- String safeDomainClassPath = "url" + File .separator + "safe_domain.xml" ;
21+ String rootTag = "domains" ;
22+ String safeDomainTag = "safedomains" ;
23+ String blockDomainTag = "blockdomains" ;
24+ String finalTag = "domain" ;
25+ String safeDomainClassPath = "url" + File .separator + "url_safe_domain.xml" ;
2426 ArrayList <String > safeDomains = new ArrayList <>();
27+ ArrayList <String > blockDomains = new ArrayList <>();
2528
2629 try {
2730 // 读取resources目录下的文件
@@ -32,23 +35,104 @@ public SafeDomainParser(){
3235 DocumentBuilder db = dbf .newDocumentBuilder ();
3336 Document doc = db .parse (file ); // parse xml
3437
35- NodeList rootNode = doc .getElementsByTagName (safeTag );
38+ NodeList rootNode = doc .getElementsByTagName (rootTag ); // 解析根节点domains
3639 Node domainsNode = rootNode .item (0 );
3740 NodeList child = domainsNode .getChildNodes ();
3841
3942 for (int i = 0 ; i < child .getLength (); i ++){
4043 Node node = child .item (i );
41- if (node .getNodeName ().equals (domainSafeTag )) {
42- safeDomains .add (node .getTextContent ());
44+ // 解析safeDomains节点
45+ if (node .getNodeName ().equals (safeDomainTag )) {
46+ NodeList tagChild = node .getChildNodes ();
47+ for (int j = 0 ; j < tagChild .getLength (); j ++) {
48+ Node finalTagNode = tagChild .item (j );
49+ // 解析safeDomains节点里的domain节点
50+ if (finalTagNode .getNodeName ().equals (finalTag )) {
51+ safeDomains .add (finalTagNode .getTextContent ());
52+ }
53+ }
54+ }else if (node .getNodeName ().equals (blockDomainTag )) {
55+ NodeList finalTagNode = node .getChildNodes ();
56+ for (int j = 0 ; j < finalTagNode .getLength (); j ++) {
57+ Node tagNode = finalTagNode .item (j );
58+ // 解析blockDomains节点里的domain节点
59+ if (tagNode .getNodeName ().equals (finalTag )) {
60+ blockDomains .add (tagNode .getTextContent ());
61+ }
62+ }
4363 }
4464 }
45-
4665 }catch (Exception e ){
4766 logger .error (e .toString ());
4867 }
4968
5069 WebConfig wc = new WebConfig ();
5170 wc .setSafeDomains (safeDomains );
71+ wc .setBlockDomains (blockDomains );
72+
73+ // 解析SSRF配置
74+ String ssrfRootTag = "ssrfsafeconfig" ;
75+ String ssrfSafeDomainTag = "safedomains" ;
76+ String ssrfBlockDomainTag = "blockdomains" ;
77+ String ssrfBlockIpsTag = "blockips" ;
78+ String ssrfFinalTag = "domain" ;
79+ String ssrfIpFinalTag = "ip" ;
80+ String ssrfSafeDomainClassPath = "url" + File .separator + "ssrf_safe_domain.xml" ;
81+
82+ ArrayList <String > ssrfSafeDomains = new ArrayList <>();
83+ ArrayList <String > ssrfBlockDomains = new ArrayList <>();
84+ ArrayList <String > ssrfBlockIps = new ArrayList <>();
85+
86+ try {
87+ // 读取resources目录下的文件
88+ ClassPathResource resource = new ClassPathResource (ssrfSafeDomainClassPath );
89+ File file = resource .getFile ();
90+
91+ DocumentBuilderFactory dbf = DocumentBuilderFactory .newInstance ();
92+ DocumentBuilder db = dbf .newDocumentBuilder ();
93+ Document doc = db .parse (file ); // parse xml
94+
95+ NodeList rootNode = doc .getElementsByTagName (ssrfRootTag ); // 解析根节点
96+ Node domainsNode = rootNode .item (0 );
97+ NodeList child = domainsNode .getChildNodes ();
98+
99+ for (int i = 0 ; i < child .getLength (); i ++){
100+ Node node = child .item (i );
101+ // 解析safeDomains节点
102+ if (node .getNodeName ().equals (ssrfSafeDomainTag )) {
103+ NodeList tagChild = node .getChildNodes ();
104+ for (int j = 0 ; j < tagChild .getLength (); j ++) {
105+ Node tagFinalNode = tagChild .item (j );
106+ if (tagFinalNode .getNodeName ().equals (ssrfFinalTag )) {
107+ ssrfSafeDomains .add (tagFinalNode .getTextContent ());
108+ }
109+ }
110+ }else if (node .getNodeName ().equals (ssrfBlockDomainTag )) {
111+ NodeList tagChild = node .getChildNodes ();
112+ for (int j = 0 ; j < tagChild .getLength (); j ++) {
113+ Node tagFinalNode = tagChild .item (j );
114+ if (tagFinalNode .getNodeName ().equals (ssrfFinalTag )) {
115+ ssrfBlockDomains .add (tagFinalNode .getTextContent ());
116+ }
117+ }
118+ }else if (node .getNodeName ().equals (ssrfBlockIpsTag )){
119+ NodeList tagChild = node .getChildNodes ();
120+ for (int j = 0 ; j < tagChild .getLength (); j ++) {
121+ Node tagFinalNode = tagChild .item (j );
122+ // 解析 blockIps 节点里的 ip 节点
123+ if (tagFinalNode .getNodeName ().equals (ssrfIpFinalTag )) {
124+ ssrfBlockIps .add (tagFinalNode .getTextContent ());
125+ }
126+ }
127+ }
128+ }
129+ }catch (Exception e ){
130+ logger .error (e .toString ());
131+ }
132+
133+ wc .setSsrfBlockDomains (ssrfBlockDomains );
134+ wc .setSsrfBlockIps (ssrfBlockIps );
135+ wc .setSsrfSafeDomains (ssrfSafeDomains );
52136 }
53137}
54138
0 commit comments