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

io.leopard.web.security.xss.XssCheckerOnxxxImpl Maven / Gradle / Ivy

The newest version!
package io.leopard.web.security.xss;

import java.util.HashSet;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class XssCheckerOnxxxImpl implements XssChecker {

	private static final Pattern pattern = Pattern.compile("[<'\"=]");

	private static final Pattern onxxxPattern = Pattern.compile("on[a-z]+", Pattern.CASE_INSENSITIVE);

	private static final Set ONXXX_SET = new HashSet();
	static {
		addOnxxx("onerror");
		addOnxxx("onclick");
		addOnxxx("onload");
		addOnxxx("onAbort");
		addOnxxx("onActivate");
		addOnxxx("onAfterPrint");
		addOnxxx("onAfterUpdate");
		addOnxxx("onBeforeActivate");
		addOnxxx("onBeforeCopy");
		addOnxxx("onBeforeCut");
		addOnxxx("onBeforeDeactivate");
		addOnxxx("onBeforeEditFocus");
		addOnxxx("onBeforePaste");
		addOnxxx("onBeforePrint");
		addOnxxx("onBeforeUnload");
		addOnxxx("onBegin");
		addOnxxx("onBlur");
		addOnxxx("onBounce");
		addOnxxx("onCellChange");
		addOnxxx("onChange");
		addOnxxx("onClick");
		addOnxxx("ontextMenu");
		addOnxxx("ontrolSelect");
		addOnxxx("onCopy");
		addOnxxx("onCut");
		addOnxxx("onDataAvailable");
		addOnxxx("onDataSetChanged");
		addOnxxx("onDataSetComplete");
		addOnxxx("onDblClick");
		addOnxxx("onDeactivate");
		addOnxxx("onDrag");
		addOnxxx("onDragEnd");
		addOnxxx("onDragLeave");
		addOnxxx("onDragEnter");
		addOnxxx("onDragOver");
		addOnxxx("onDragDrop");
		addOnxxx("onDrop");
		addOnxxx("onEnd");
		addOnxxx("onError");
		addOnxxx("onErrorUpdate");
		addOnxxx("onFilterChange");
		addOnxxx("onFinish");
		addOnxxx("onFocus");
		addOnxxx("onFocusIn");
		addOnxxx("onFocusOut");
		addOnxxx("onHelp");
		addOnxxx("onKeyDown");
		addOnxxx("onKeyPress");
		addOnxxx("onKeyUp");
		addOnxxx("onLayoutComplete");
		addOnxxx("onLoad");
		addOnxxx("onLoseCapture");
		addOnxxx("onMediaComplete");
		addOnxxx("onMediaError");
		addOnxxx("onMouseDown");
		addOnxxx("onMouseEnter");
		addOnxxx("onMouseLeave");
		addOnxxx("onMouseMove");
		addOnxxx("onMouseOut");
		addOnxxx("onMouseOver");
		addOnxxx("onMouseUp");
		addOnxxx("onMouseWheel");
		addOnxxx("onMove");
		addOnxxx("onMoveEnd");
		addOnxxx("onMoveStart");
		addOnxxx("onOutOfSync");
		addOnxxx("onPaste");
		addOnxxx("onPause");
		addOnxxx("onProgress");
		addOnxxx("onPropertyChange");
		addOnxxx("onReadyStateChange");
		addOnxxx("onRepeat");
		addOnxxx("onReset");
		addOnxxx("onResize");
		addOnxxx("onResizeEnd");
		addOnxxx("onResizeStart");
		addOnxxx("onResume");
		addOnxxx("onReverse");
		addOnxxx("onRowsEnter");
		addOnxxx("onRowExit");
		addOnxxx("onRowDelete");
		addOnxxx("onRowInserted");
		addOnxxx("onScroll");
		addOnxxx("onSeek");
		addOnxxx("onSelect");
		addOnxxx("onChange");
		addOnxxx("onSelectStart");
		addOnxxx("onStart");
		addOnxxx("onStop");
		addOnxxx("onSyncRestored");
		addOnxxx("onSubmit");
		addOnxxx("onTimeError");
		addOnxxx("onTrackChange");
		addOnxxx("onUnload");
		addOnxxx("onURLFlip");
	}

	protected static void addOnxxx(String name) {
		ONXXX_SET.add(name.toLowerCase());
	}

	@Override
	public boolean check(String value) {
		if (value.length() < 10) {
			return false;
		}
		// if (value.indexOf("=") == -1) {
		// return false;
		// }
		boolean hasBadCode = pattern.matcher(value).find();
		if (!hasBadCode) {
			return false;
		}
		Matcher m = onxxxPattern.matcher(value);
		while (m.find()) {
			String name = m.group();
			name = name.toLowerCase();
			if (ONXXX_SET.contains(name)) {
				return true;
			}
		}
		return false;
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy