中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

網關防XSS過濾器的設計是什么

發布時間:2021-10-20 18:18:40 來源:億速云 閱讀:205 作者:柒染 欄目:大數據

本篇文章為大家展示了網關防XSS過濾器的設計是什么,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

1. 如何防止XSS攻擊?

XSS的防御基本上,不外乎加強對使用者輸入的驗證,以及在輸出時對內容進行轉譯。XSS問題需要多種方案的配合使用:

  • 前端做表單數據合法性校驗(這是第一層防護,雖然“防君子不防小人”,但必須要有)

  • 后端做數據過濾與替換(總有一些人會通過工具錄入一些非法數據造訪你的服務器的)

  • 持久層數據編碼規范,比如使用Mybatis,看Mybatis中“$"和"#"千萬不要亂用了解這些小細節

1.1 Spring AOP

使用Spring AOP橫切所有API入口,貌似可以很輕松的實現,但是RESTful API設計并不是統一的入參格式,有GET請求的RequestParam的入參,也有POST請求RequestBody的入參,不同的入參很難進行統一處理,所以這并不是很好的方式,關于RESTful接口的設計,可以參考如何設計好的RESTfulAPI?

1.2 HttpMessageConverter

請求的JSON數據都要過HttpMessageConverter進行轉換,通常我們可以通過添加MappingJackson2HttpMessageConverter并重寫readInternal方法,將jackson的序列化和反序列化過程修改,加入過濾xss代碼,并將其注冊到MappingJackson2HttpMessageConverter中,那么就能解決json請求的xss問題,但這種方式只能過濾兩種請求的參數:Content-Type為form表單(application/x-www-form-urlencoded)和 json(application/json),而沒有辦法處理GET請求,所以也不是一個很好的方案。(具體做法可以參考github.com/yangc91-SpringMvc防御XSS實踐)

                                網關防XSS過濾器的設計是什么

                                                圖-HttpMessageConverter轉換示意圖

@Override
protected Object readInternal(Class<?> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
    return super.readInternal(clazz, inputMessage);
}

1.3 裝飾器模式Decorator結合ESAPI

還有一個問題是調用request.getInputStream()讀取流,只能讀取一次,調用責任鏈后續filter會導致request.getInputStream()內容為空,即便這是Filter責任鏈中的最后一個filter,程序運行到HttpMessageConverter時也會拋出異常,因此需要通過裝飾器完成流的多次讀取

ESAPI是一個免費、開源的Web應用程序安全控制組件,在Java Web應用中可幫助開發人員降低應用的風險。ESAPI是OWASP組織的一個開源項目,主頁是:http://www.owasp.org/index.php/ESAPI。借助ESAPI可以很方便地替換和過濾掉非法參數,同時防止SQL注入。

2. 如何實現對請求參數的修改過濾

對所有后臺請求使用filter過濾,在filter中將request中有隱患的關鍵字過濾掉,由于request中值不能直接修改,所以對request使用裝飾器模式(Decorator)

在過濾器中對ServerWebExchange進行裝飾,ServerWebExchange命名為服務網絡交換器,存放著重要的請求-響應屬性、請求實例和響應實例等等,有點像Context的角色。具體的過濾器設計如下:

public class ServerWebExchangeModifyFilter implements WebFilter {

	@Override
	public Mono<Void> filter(final ServerWebExchange exchange, final WebFilterChain chain) {
		// throw UnsupportedOperationException, 安全考慮
		// request.getHeaders().add("x", "1");
		ServerWebExchangeDecorator decorator = new XssServerWebExchangeDecorator(exchange);
		return chain.filter(decorator);
	}
}

ServerWebExchange裝飾器為:

public class XssServerWebExchangeDecorator extends ServerWebExchangeDecorator {

	private final ServerHttpRequestDecorator requestDecorator;

	public XssServerWebExchangeDecorator(ServerWebExchange delegate) {
		super(delegate);
		this.requestDecorator = new XssServerHttpRequestDecorator(delegate.getRequest());
	}

	@Override
	public ServerHttpRequest getRequest() {
		return this.requestDecorator;
	}
}

請求裝飾器如下:

public class XssServerHttpRequestDecorator extends ServerHttpRequestDecorator {

	private final static HtmlFilter HTML_FILTER = new HtmlFilter();
	private MultiValueMap<String, String> queryParams;
	private HttpHeaders headers;

	public XssServerHttpRequestDecorator(ServerHttpRequest delegate) {
		super(delegate);
		this.queryParams = new HttpHeaders();
		this.queryParams.addAll(filterQueryParams(delegate.getQueryParams()));
		this.headers = new HttpHeaders();
		this.headers.addAll(filterHttpHeaders(delegate.getHeaders()));
	}

	@Override
	public MultiValueMap<String, String> getQueryParams() {
		return this.queryParams;
	}

	@Override
	public HttpHeaders getHeaders() {
		return this.headers;
	}

	private MultiValueMap filterQueryParams(MultiValueMap<String, String> queryParams) {
		// ...自定義過濾邏輯
		return encodeQueryParams;
	}

	private MultiValueMap filterHttpHeaders(HttpHeaders httpHeaders) {
		// ...自定義過濾邏輯
		return encodeHttpHeaders;
	}
}


上述內容就是網關防XSS過濾器的設計是什么,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

xxs
AI

乌兰察布市| 曲水县| 乌什县| 新泰市| 甘孜| 漳浦县| 新田县| 黄平县| 三明市| 长海县| 富平县| 鄱阳县| 象山县| 年辖:市辖区| 永胜县| 南木林县| 齐齐哈尔市| 日喀则市| 宿迁市| 勐海县| 舒兰市| 林州市| 个旧市| 万州区| 色达县| 牟定县| 隆回县| 唐河县| 白山市| 沽源县| 祁连县| 湘阴县| 饶河县| 班玛县| 九龙县| 武平县| 文成县| 赤壁市| 高雄县| 皋兰县| 安福县|