All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.gateway.invoke.security.SqlInjSecurityCheck Maven / Gradle / Ivy

package com.gateway.invoke.security;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.gateway.connector.proto.Proto;
import com.gateway.message.SystemMessage;
import com.gateway.utils.JsonUtils;

public class SqlInjSecurityCheck implements ISecurityCheck {
	private final Logger logger = LoggerFactory.getLogger(this.getClass());
	private static int WhiteListCheck = 10004;
	private static String WhiteListCheckMsg = "";
	private List sqls = new ArrayList();

	public void init() {
		sqls.add("'");
//		sqls.add("\"");
		//sqls.add("{");
		//sqls.add("}");
		//sqls.add("[");
		//sqls.add("]");
//		sqls.add("\\");
//		sqls.add(":");
		// sqls.add(";");
		sqls.add("<");
		sqls.add(">");
//		sqls.add("?");
		// sqls.add(",");
		// sqls.add(".");
		sqls.add("`");
		sqls.add("~");
//		sqls.add("!");
//		sqls.add("@");
		sqls.add("$");
		sqls.add("%");
		sqls.add("^");
		//sqls.add("and");
		sqls.add("exec");
		sqls.add("insert");
		sqls.add("select");
		sqls.add("delete");
		sqls.add("update");
//		sqls.add("count");
//		sqls.add("count");
//		sqls.add("*");
//		sqls.add("chr");
		sqls.add("mid");
		sqls.add("master");
		sqls.add("truncate");
		sqls.add("char");
		sqls.add("declare");
//		sqls.add("or");

	}

	@Override
	public SecurityResult check(SystemMessage sMsg, Proto message, String serverName, String method, String content,
			Map hm) {
		SecurityResult pr = new SecurityResult();

		Object contentObj = hm.get("content");
		if (contentObj != null) {
			if (contentObj instanceof String) {
				content = contentObj + "";
				if (isInj(content)) {
					pr.code = WhiteListCheck;
					pr.msg = WhiteListCheckMsg;
					return pr;
				}
			} else if (contentObj instanceof JSONArray) {
				JSONArray jsonArray = (JSONArray) contentObj;
				for (Object object : jsonArray) {
					JSONObject jo = (JSONObject) object;
					if (jo != null) {
						for (Entry entry : jo.entrySet()) {
							String value = entry.getValue() + "";
							if (isInj(value)) {
								pr.code = WhiteListCheck;
								pr.msg = WhiteListCheckMsg;
								break;
							}
						}
					}
				}
			} else {
				JSONObject jo = (JSONObject) contentObj;
				if (jo != null) {
					for (Entry entry : jo.entrySet()) {
						String value = entry.getValue() + "";
						if (isInj(value)) {
							pr.code = WhiteListCheck;
							pr.msg = WhiteListCheckMsg;
							break;
						}
					}
				}

			}
		}

		return pr;
	}

	private boolean isInj(String value) {
		boolean flag = false;
		for (String sql : sqls) {
			if (value.indexOf(sql) >= 0) {
				flag = true;
				logger.warn(String.format("value:%s sql:%s", value, sql));
				break;
			}
		}
		return flag;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy