關於SQL注入與防注入


SQL 注入漏洞存在的原因,就是拼接 SQL 參數。也就是將用於輸入的查詢參數,直接拼接在 SQL 語句中,導致了SQL 注入漏洞。

簡單來說,就是別人可以通過你的語法漏洞向你的數據庫隨便添加數據

 

解決辦法:

采用sql語句預編譯和綁定變量,是防御sql注入的最佳方法

String sql = "select id, no from user where id=?";
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setInt(1, id);
        ps.executeQuery();

  其原因就是:采用了PreparedStatement,就會將sql語句:"select id, no from user where id=?" 預先編譯好,也就是SQL引擎會預先進行語法分析,產生語法樹,生成執行計划,

也就是說,后面你輸入的參數,無論你輸入的是什么,都不會影響該sql語句的 語法結構了,因為語法分析已經完成了,而語法分析主要是分析sql命令,比如 select ,from ,where ,and, or ,order by 等等。所以即使你后面輸入了這些sql命令,也不會被當成sql命令來執行了,因為這些sql命令的執行, 必須先的通過語法分析,生成執行計划,

既然語法分析已經完成,已經預編譯過了,那么后面輸入的參數,是絕對不可能作為sql命令來執行的,只會被當做字符串字面值參數。所以sql語句預編譯可以防御sql注入。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM