1. 程式人生 > >org.springframework.jdbc.UncategorizedSQLExceptionexpect:RPAREN, actual LPAREN unpivot

org.springframework.jdbc.UncategorizedSQLExceptionexpect:RPAREN, actual LPAREN unpivot

org.springframework.jdbc.UncategorizedSQLException:sql injection violation  RPAREN, actual LPAREN unpivot

sql語句注入失敗,使用的是oracle 資料庫,在plsql裡面能執行,放到專案中報錯。

select distinct s.id,s.userName,s.realname from Twbuser s where s.username in (
select t.USERNAME1 from (
select id,PERSON,USERNAME1 from (

select a.* from KQ_ORDER_CONFIG a where org_name=#{orgName} and delflag=0
)
unpivot (USERNAME1 for PERSON in (PERSON1,PERSON2,PERSON3,PERSON4,PERSON5) )
) t where instr(
(select receive_field from KQ_ORDERPROCESS where id=#{id}),t.person
)>0

) and s.delflag=0

主要問題出在  unpivot  行轉列函式上,連線池用的是阿里的druid。


然後檢視配置檔案:

<bean id="wall-filter" class="com.alibaba.druid.wall.WallFilter">
		<property name="dbType" value="mysql" />
		<property name="config" ref="wall-filter-config" />
	</bean>
	<bean id="wall-filter-config" class="com.alibaba.druid.wall.WallConfig">
		<!-- 是否允許執行SELECT * FROM T這樣的語句。如果設定為false,不允許執行select * from t,但select 
			* from (select id, name from t) a。這個選項是防禦程式通過呼叫select *獲得資料表的結構資訊。 -->
		<property name="selectAllColumnAllow" value="false" />
		<!-- 是否允許執行DELETE語句 -->
		<property name="deleteAllow" value="false" />
		<!-- truncate語句是危險,預設開啟,若需要自行關閉 -->
		<property name="truncateAllow" value="false" />
		<!-- 是否允許建立表 -->
		<property name="createTableAllow" value="false" />
		<!-- 是否允許執行Alter Table語句 -->
		<property name="alterTableAllow" value="false" />
		<!-- 是否允許修改表 -->
		<property name="dropTableAllow" value="false" />
		<!-- 是否允許非以上基本語句的其他語句,預設關閉,通過這個選項就能夠遮蔽DDL。 -->
		<property name="noneBaseStatementAllow" value="true" />
		<!-- 檢查DELETE語句是否無where條件,這是有風險的,但不是SQL注入型別的風險 -->
		<property name="deleteWhereNoneCheck" value="true" />
		<!-- 檢查UPDATE語句是否無where條件,這是有風險的,但不是SQL注入型別的風險 -->
		<property name="updateWhereNoneCheck" value="true" />
		<!-- 檢查查詢條件(WHERE/HAVING子句)中是否包含AND永真條件-->
		<property name="conditionAndAlwayTrueAllow" value="true" />
		<!-- 檢查查詢條件(WHERE/HAVING子句)中是否包含LIKE永真條件 -->
		<property name="conditionLikeTrueAllow" value="true" />
		<!-- SELECT ... INTO OUTFILE 是否允許,這個是mysql注入攻擊的常見手段,預設是禁止的 -->
		<property name="selectIntoOutfileAllow" value="true" />
	</bean>
dbtype為mysql........識別不了 unpivot 函式,用的是oracle資料庫,mysql改成oracle之後就能正常運行了。