1. 程式人生 > >MyBatis 防止 % _ sql 注入攻擊 解決方法

MyBatis 防止 % _ sql 注入攻擊 解決方法

首先說思路,在mybatis中防止sql注入,目前只能在Controller層進行轉義,後臺sql進行查詢,然後在controller層轉義回來,返回到前臺。

理論上應該可以在dao.xml中進行判斷   但是目前還沒寫出來。Orz

上程式碼

@RequiresPermissions("member:member:view")
	@RequestMapping(value = {"list", ""})
	public String list(Member member, HttpServletRequest request, HttpServletResponse response, Model model) {

		/** -- 以下 防止sql%注入 故對其進行轉化---- **/
		String companyName = member.getCompanyName();
		String loginName = member.getLoginName();

		if (companyName != null ) {
			if(companyName.contains("%")){
				member.setCompanyName(companyName.replaceAll("\\%", "\\\\%"));
			}
			if(companyName.contains("_")){
				member.setCompanyName(companyName.replaceAll("\\_", "\\\\_"));
			}
		}

		if (loginName != null) {
			if (loginName.contains("%")) {
				member.setLoginName(loginName.replaceAll("\\%", "\\\\%"));
			}
			if (loginName.contains("_")) {
				member.setLoginName(loginName.replaceAll("\\_", "\\\\_"));
			}
		}
		
		/** --  轉化完畢 -- **/

		Page<Member> page = memberService.findPage(new Page<Member>(request,
				response), member);
		
		/**-- 將轉化的字元恢復原來的值 --**/
		if (companyName != null) {
			member.setCompanyName(companyName);
		}
		/**-- 將轉化的字元恢復原來的值 --**/
		if (loginName != null) {
			member.setLoginName(loginName);
		}
		model.addAttribute("page", page);

		return "dsp/member/memberList";
	}

sql

<select id="findList" resultType="Member">
		SELECT 
			<include refid="memberColumns"/>
		FROM dsp_member a
		<include refid="memberJoins"/>
		<where>
			a.del_flag = #{DEL_FLAG_NORMAL}
			<if test="companyName != null and companyName != ''">
				AND a.company_name LIKE 
					<if test="dbName == 'oracle'">'%'||#{companyName}||'%' ESCAPE '\'</if>
					<if test="dbName == 'mssql'">'%'+#{companyName}+'%'</if>
					<if test="dbName == 'mysql'">concat('%',#{companyName},'%')</if>
			</if>
			<if test="loginName != null and loginName != ''">
				AND a.login_name LIKE 
					<if test="dbName == 'oracle'">'%'||#{loginName}||'%' ESCAPE '\'</if>
					<if test="dbName == 'mssql'">'%'+#{loginName}+'%'</if>
					<if test="dbName == 'mysql'">concat('%',#{loginName},'%')</if>
			</if>
			<if test="validStatus != null and validStatus != ''">
				AND a.valid_status = #{validStatus}
			</if>
		</where>
		<if test="sqlMap.confSql != null and sqlMap.confSql != ''">
		${sqlMap.confSql}
		</if>
		<choose>
			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
				ORDER BY ${page.orderBy}
			</when>
			<otherwise>
				ORDER BY a.update_date DESC
			</otherwise>
		</choose>
	</select>

sql這裡主要是用 ESCAPE 進行轉義

<if test="dbName == 'oracle'">'%'||#{companyName}||'%' ESCAPE '\'</if>
<if test="dbName == 'oracle'">'%'||#{loginName}||'%' ESCAPE '\'</if>

相關推薦

MyBatis 防止 % _ sql 注入攻擊 解決方法

首先說思路,在mybatis中防止sql注入,目前只能在Controller層進行轉義,後臺sql進行查詢,然後在controller層轉義回來,返回到前臺。 理論上應該可以在dao.xml中進行判斷   但是目前還沒寫出來。Orz 上程式碼 @RequiresPer

Hibernate防止SQL注入攻擊方法

如果在查詢欄位中輸入單引號"'",則會報錯,這是因為輸入的單引號和其他的sql組合在一起程式設計了一個新的sql,實際上這就是SQL注入漏洞,後來我在前臺和後臺都對輸入的字元進行了判斷。 永遠也不要寫這樣的程式碼:      String queryString = "f

html轉譯及防止js指令碼注入攻擊方法

js指令碼攻擊 有的時候頁面中會有一個輸入框,使用者輸入內容後會顯示在頁面中,類似於網頁聊天應用,留言板等。如果使用者輸入了一段js指令碼,比例:,頁面會彈出一個對話方塊,或者輸入的指令碼中有改變頁面js變數的程式碼則會時程式異常或者達到跳過某種驗證的目的。那如何防止這種惡意的js指令碼

SQL注入解決方法

                         

Mybatis防止SQL注入攻擊

相比於ORM框架,Mybatis只能被稱為半自動持久層框架,它其實是將JDBC進行了輕量級的封裝,提供SQL對映能力,便於更為方便地管理專案中的SQL程式碼,同時避免程式設計師重複手動編寫連線資料庫底層程式碼,並提供資料快取能力。 JDBC在使用時存在SQL注

防止SQL注入攻擊的一些方法小結

開頭語:SQL注入攻擊的危害性很大。在講解其防止辦法之前,資料庫管理員有必要先了解一下其攻擊的原理。這有利於管理員採取有針對性的防治措施 -----解決方案-------------------------------------------------------- 過濾

PHP防止被xss和sql語句注入攻擊方法(網站和app通用)

傳過來的引數 如果是整數型別 那就直接用intval函式轉化為整數 字串 那就要用函數了 注意輸入的內容htmlspecialchars過濾程式碼如下 // Anti_SQL Injection, escape quotes function filter($content

sql注入攻擊和PreparedStatement有效防止sql注入攻擊

【1】sql注入攻擊: /** * SQL 注入. */ @Test public void testSQLInjection() { String username = "a' OR PASSWORD = "; String password = " OR '1'='1

Java程式設計師從笨鳥到菜鳥之(一百零二)sql注入攻擊詳解(三)sql注入解決辦法

                在前面的部落格中,我們詳細介紹了:      我們瞭解了sql注入原理和sql注入過程,今天我們就來了解一下sql注入的解決辦法。怎麼來解決和防範sql注入,由於本人主要是搞java web開發的小程式設計師,所以這裡我只講一下有關於java web的防止辦法。其實對於其他的,

網站漏洞修復方案防止SQL注入攻擊漏洞

SQL注入漏洞在網站漏洞裡面屬於高危漏洞,排列在前三,受影響範圍較廣,像asp、.net、PHP、java、等程式語言編寫的程式碼,都存在著sql注入漏洞,那麼如何檢測網站存在sql注入漏洞?SQL注入漏洞測試方法在程式程式碼裡不管是get提交,post提交,cookies的

如何防止網站被SQL注入攻擊

首先我們應該對網站程式程式碼進行詳細的安全檢測,與網站漏洞檢測,在網站的前端進行多種方式的提交與注入檢測,對程式碼裡中與使用者互動並與資料庫直接傳輸打交道的程式碼進行嚴查,看看是否可以摻雜非法的sql注入程式碼進去。對GET、POST、COOKIES的提交進行過濾,過濾特殊符號,對一些&*%¥#@/等

SQL注入攻擊原理以及基本方法

一、SQL注入的概述 定義:SQL注入即是指web應用程式對使用者輸入資料的合法性沒有判斷,攻擊者可以在web應用程式中事先定義好的查詢語句的結尾上新增額外的SQL語句,以此來實現欺騙資料庫伺服器執行非授權的任意查詢,從而進一步得到相應的資料資訊。             

php中防止SQL注入的最好方法是什麼?

如果使用者輸入的是直接插入到一個SQL語句中的查詢,應用程式會很容易受到SQL注入,例如下面的例子: $unsafe_variable = $_POST['user_input']; mysql_query("INSERT INTO table (column) VAL

如何防止SQL注入攻擊

    SQL注入攻擊的危害性很大,在講解其防止方法之前,資料庫管理員有必要想了解一下其攻擊的原理,這有利於管理員採取有針對性的防治措施。     一、SQL注入攻擊的簡單示例     statement:="select * from users where value=

文字框輸入防止sql注入攻擊

對文字框輸入文字進行校驗禁止輸入%和<等: <input class="easyui-textbox" data-options="validType:['length[0,30]','

防止GET和POST方式引起的SQL注入攻擊ASP程式

編寫通用的SQL防注入程式一般的http請求不外乎get 和 post,所以只要我們在檔案中過濾所有post或者get請求中的引數資訊中非法字元即可,所以我們實現http 請求資訊過濾就可以判斷是是否受到SQL注入攻擊。IIS傳遞給asp.dll的get 請求是是以字串的形式

PL/SQL Developer過期解決方法

方法 sdn current 解決方法 user style href ges password 參考資料:   plsql過期解決方法   plsql永久註冊碼適用個版本 方法一: 1.首先,登陸PL/SQL Developer,PL/SQL Developer要到期了

滲透測試:SQL注入攻擊(ASP)

分類: 滲透測試 SQL注入攻擊是黑客對資料庫進行攻擊的常用手段之一。隨著B/S模式應用開發的發展,使用這種模式編寫應用程式的程式設計師也越來越多。但是由於程式設計師的水平及經驗也參差不齊,相當大一部分程式設計師在編寫程式碼的時候,沒有對使用者輸入資料的合法性進行判斷,使應用程式存在安全隱患。

Java程式設計師從笨鳥到菜鳥之(一百)sql注入攻擊詳解(一)sql注入原理詳解

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

SQL注入攻擊及危害

SQL注入攻擊是黑客對資料庫進行攻擊的常用手段之一。隨著B/S模式應用開發的發展,使用這種模式編寫應用程式的程式設計師也越來越多。但是由於程式設計師的水平及經驗也參差不齊,相當大一部分程式設計師在編寫程式碼的時候,沒有對使用者輸入資料的合法性進行判斷,使應用程式存在安全隱患。使用者可以提交一段資料庫