亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

網關防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

塘沽区| 隆回县| 新晃| 郑州市| 肇庆市| 霍邱县| 广丰县| 五常市| 洛浦县| 资中县| 甘南县| 吉首市| 霍州市| 岳阳市| 屏边| 天门市| 阿克苏市| 五家渠市| 靖安县| 隆子县| 广西| 三原县| 德惠市| 贵溪市| 都昌县| 铅山县| 抚远县| 桦甸市| 台北市| 秀山| 松潘县| 西充县| 泉州市| 樟树市| 鄂温| 永宁县| 黔江区| 阜宁县| 汉沽区| 蚌埠市| 崇信县|