1. 程式人生 > >java處理SQL特殊字元轉義 防止sql注入

java處理SQL特殊字元轉義 防止sql注入


SQL特殊字元轉義

應 該說,您即使沒有處理 HTML 或 JavaScript 的特殊字元,也不會帶來災難性的後果,但是如果不在動態構造 SQL 語句時對變數中特殊字元進行處理,將可能導致程式漏洞、資料盜取、資料破壞等嚴重的安全問題。網路中有大量講解 SQL 注入的文章,感興趣的讀者可以搜尋相關的資料深入研究。

雖然 SQL 注入的後果很嚴重,但是隻要對動態構造的 SQL 語句的變數進行特殊字元轉義處理,就可以避免這一問題的發生了。來看一個存在安全漏洞的經典例子:

SELECT COUNT(userId) 
FROM t_user 
WHERE userName='"+userName+"' AND password ='"+password+"';

以上 SQL 語句根據返回的結果數判斷使用者提供的登入資訊是否正確,如果 userName 變數不經過特殊字元轉義處理就直接合併到 SQL 語句中,黑客就可以通過將 userName 設定為 “1' or '1'='1”繞過使用者名稱/密碼的檢查直接進入系統了。

所 以除非必要,一般建議通過 PreparedStatement 引數繫結的方式構造動態 SQL 語句,因為這種方式可以避免 SQL 注入的潛在安全問題。但是往往很難在應用中完全避免通過拼接字串構造動態 SQL 語句的方式。為了防止他人使用特殊 SQL 字元破壞 SQL 的語句結構或植入惡意操作,必須在變數拼接到 SQL 語句之前對其中的特殊字元進行轉義處理。Spring 並沒有提供相應的工具類,您可以通過 jakarta commons lang 通用類

包中(spring/lib/jakarta-commons/commons-lang.jar)的 StringEscapeUtils 完成這一工作:

package com.baobaotao.escape;
import org.apache.commons.lang.StringEscapeUtils;
public class SqlEscapeExample {
    public static void main(String[] args) {
        String userName = "1' or '1'='1";
        String password = "123456";
        userName = StringEscapeUtils.escapeSql(userName);
        password = StringEscapeUtils.escapeSql(password);
        String sql = "SELECT COUNT(userId) FROM t_user WHERE userName='"
            + userName + "' AND password ='" + password + "'";
        System.out.println(sql);
    }
}

事實上, StringEscapeUtils 不但提供了 SQL 特殊字元轉義處理的功能,還提供了 HTML、XML、JavaScript、Java 特殊字元的轉義和還原的方法。如果您不介意引入 jakarta commons lang 類包,我們更推薦您使用 StringEscapeUtils 工具類完成特殊字元轉義處理的工作。

相關推薦

java處理SQL特殊字元轉義 防止sql注入

SQL特殊字元轉義 應 該說,您即使沒有處理 HTML 或 JavaScript 的特殊字元,也不會帶來災難性的後果,但是如果不在動態構造 SQL 語句時對變數中特殊字元進行處理,將可能導致程式漏洞、資料盜取、資料破壞等嚴重的安全問題。網路中有大量講解 SQL 注入的文

Oracle SQL 部分特殊字元轉義及escape的用法

在處理sql時,遇到insert 或update 的引數中含有特殊字元“&”,下劃線“_”, 單引號" ' "等時,要做轉義處理。 例:插入特殊字元'&' update userinfo set pageurl='myjsp?page=1&pagesiz

Java處理正則表示式特殊字元轉義

正則需要轉義字元:'$', '(', ')', '*', '+', '.', '[', ']', '?', '\\', '^', '{', '}', '|' 異常現象: java.util.regex.PatternSyntaxException: Dangling

關於處理SQL特殊字元的基本方法總結

在sql語句中,有些特殊字元,是sql保留的。比如 ' [ ]  等。我們可以先看看它們的用法。 當需要查詢某資料時,加入條件語句,或著當你需要insert記錄時,我們用  '  來將字元型別的資料引起來。比如: Select * from Customers where City = 'London' 當表

java中預處理PrepareStatement為什麼能起到防止SQL注入的作用??!!

       大家都知道,java中JDBC中,有個預處理功能,這個功能一大優勢就是能提高執行速度尤其是多次操作資料庫的情況,再一個優勢就是預防SQL注入,嚴格的說,應該是預防絕大多數的SQL注入。

js/jquery對特殊字元進行轉義防止js注入使用示例

  /** JQuery Html Encoding、Decoding * 原理是利用JQuery自帶的html()和text()函式可以轉義Html字元 * 虛擬一個Div通過賦值和取值來得到想要的Html編碼或者解碼 */ <script src="https://cdn.b

sql註入與防止SQL註入之參數化處理

NPU dict class 登錄 int 處理 where cal 執行 sql註入的兩種情況: 操作代碼: import pymysql user = input(‘用戶名: ‘).strip() pwd = input(‘密碼: ‘).strip() # 鏈接

jquery過濾特殊字元',防sql注入

出自:  直接上程式碼: <script type="text/javascript" language="javascript"> $(document).ready(function() { //返回 $("#btnBack").click(

[Java工具類]spring常用工具類 2.特殊字元轉義和方法入參檢測工具類

特殊字元轉義 由於 Web 應用程式需要聯合使用到多種語言,每種語言都包含一些特殊的字元,對於動態語言或標籤式的語言而言,如果需要動態構造語言的內容時,一個我們經常會碰到的問題就是特殊字元轉義的問題。下面是 Web 開發者最常面對需要轉義的特殊字元型別: HTML 特

php學習筆記(二十)mysqli的stmt的預處理類的使用(防止sql注入問題)

<?php /** * 處理資料庫的擴充套件庫 * * mysqli的預處理語句 * mysqli_stmt預處理類(推薦使用的類) * 優點:(mysqli和mysqli_result類的相比

Java-html程式碼和特殊字元轉義

1. 特殊字元轉義 適用場景:向前臺傳遞json資料時,由於傳遞的字串中含有特殊字元,需要轉義之後返回給前臺 public static String specialCharConvert(String orginalStr) {if(!isEmpty(orginalStr

Java中的特殊字元轉義問題

1 頁面顯示時,後臺準備資料要轉義的字元: >  <  "  '  & public static String html(String key) {if (null != key) {/** 特殊字元處理:* > &gt;   <

Java 檔案下載 csv檔案匯出特殊字元轉義

需求描述 將從資料庫查出的資料以生成csv檔案的方式下載下來(匯出)。 實現方案 最開始的方法是: 將從資料庫中查出的資料拼成符合csv檔案格式的字串,然後將字串轉為輸入流,最後返回InputStreamResource,達到下載的目的。下邊是實現的

使用jquery ajax對特殊字元進行轉義,防止js注入

在使用ajax進行留言的時候,出現了一個問題.因為留言內容寫完之後,通過ajax提交內容,同時使用js把留言的內容新增到頁面上來.瀏覽留言的時候也是通過ajax請求,然後再顯示的.這樣,如果有人在留言裡寫入了js語句,這結語句都會被執行.解決辦法就是對這些特殊字元進行轉義再

使用jquery對特殊字元進行轉義,防止js注入

使用ajax進行留言的時候,出現了一個問題.因為留言內容寫完之後,通過ajax提交內容,同時使用js把留言的內容新增到頁面上來.瀏覽留言的時候也是通過ajax請求,然後再顯示的.這樣,如果有人在留言裡寫入了js語句,這結語句都會被執行.解決辦法就是對這些特殊字元進行轉義再顯示出來.如果在jsp中使用jstl

Java JSON格式特殊字元處理

1.傳遞JSON格式特殊字元儲存後,查詢導致前臺無法展示    特殊字元:雙引號(")  單引號(') 等等 public static String changeHtm(String changeHtmlValue) { if(null == changeHtmlV

【Javaweb】後臺的字串轉義,入庫之前記得先對字串轉義防止sql注入問題

在《【JavaScript】某些字元不轉義可以導致網頁崩潰與涉及轉義字元的顯示方法》(點選開啟連結)提及到一種表單之前,必須把表單的輸入框的內容轉義的方法,但是,其實這種字串的轉義更加應該放在後臺中進行。這樣同時能夠有效地防止sql注入的問題。 所謂的sql注入是什麼呢?比

Java特殊字元轉義(、"、/、&)

public static String filter(String value) { if(value == null){ return null;

CSV格式特殊字元轉義處理

CSV是逗號分隔值(comama separated value)的縮寫,也有一說是字元分隔值。因為分隔符也可以是其他字元。 當csv某個欄位中包含換行(CRLF)、雙引號、逗號(分隔符)時,整個欄位必須用雙引號括起來。例如: "aaa","b

PHP:測試SQL註入以及防止SQL註入

escape sca ase ouya pro sch 參與 則表達式 其中 在寫登錄註冊的時候發現了SQL和JS註入這個危害網站的用戶舉動: 測試方法: SQL註入: 1 先來做一個測試: 2 用戶名:’ or 1 # 3 密碼:隨便寫8位以上