簡體   English   中英

如何配置Spring Controller和/或JAXB以幫助防止SQL / XSS注入

[英]How to configure Spring Controller and/or JAXB to help prevent SQL / XSS injection

我在Spring中有一個Controller,其方法如下

@RequestMapping(value = "/v1/something", method = RequestMethod.POST, headers = "content-type=application/xml")
@Valid
public void something(@RequestBody final SomeBody myDto  . . . . .

我想確保Request Body不包含任何SQL或Javascript字符,以幫助避免SQL注入,XSS攻擊等。

JAXB是否已經處理過這種情況? 我正在考慮編寫一個過濾器,但我只能閱讀一次請求體?

有什么建議么?

正確的XSS和SQL注入保護(以及一般的數據驗證)只能在服務器端進行。 客戶端驗證無關緊要,因為惡意用戶只能編寫自己的客戶端或發送自定義HTTP請求。 客戶端驗證僅用於在沒有服務器往返的情況下通知非惡意用戶表單驗證(例如:驗證字段是數字或電子郵件地址)。 即使在那種情況下,服務器也必須執行驗證。

為了防止SQL注入,請對所有參數化查詢使用綁定變量(例如預處理語句)。 您永遠不必連接客戶端輸入以生成SQL語句。 如果您從不從客戶端輸入生成SQL語句並僅將它們用作綁定變量,則根本不必擔心SQL注入。

String clientValue = ...
Connection conn = ...
PreparedStatement stmt = conn.prepare("INSERT INTO foobar VALUES (?)");
stmt.setString(clientValue);
stmt.executeUpdate();

或者使用Spring JDBC:

String clientValue = ...
JdbcTemplate jdbcTemplate = ...
jdbcTemplate.update("INSERT INTO foobar VALUES (?)", clientValue);

要防止XSS確保在輸出之前清理所有數據。 保存白名單客戶端數據通常也是一個好主意,如果您有可接受文本的明確子集,但是當您考慮Unicode支持時它會變得更加復雜。 在渲染方面處理它通常要容易得多。

例如,如果您使用JSTL渲染輸出,則可以使用以下內容:

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
${fn:escapeXml(myModelVariable)}

您可以使用Filters來清理表單。 它將獲取所有請求屬性並清除它們。 另一種選擇是使用JSoup API。 訪問以下鏈接以了解更多信息。

JSoup XSS Api

過濾方法以防止XSS威脅

編輯:

閱讀OWASP表以了解如何避免XSS和SQL注入。

OWASP - 預防XSS

OWASP - 防止SQL注入

看看與IV 3.1集成的HDIV ,它對XSS,CSRF,數據完整性檢查提供開箱即用的支持。

對於XSS攻擊主要是客戶端黑客攻擊。對於每個用戶輸入,您實際上可以使用編碼清理輸入數據,以便它取出所有特殊字符。 在客戶端處理的基本方法是使用Javascript escape()函數。 OWASP是一個很好的參考通過客戶端黑客的lon列表。 對於防止SQL注入的服務器端黑客,您可以查看使用Prepared語句或使用基於模板的查詢創建(QueryDSL)或HQL等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM