簡體   English   中英

Java(或任何其他語言)中的SQL注入指南

[英]SQL Injection Guide In Java (or any other language)

我有一個jsp代碼,其查詢如下

'select * from MyTable where

Column1='+request.getParameter('q'),

從一個執行

java.sql.Statement。 現在,只要我們可以使用

請求參數,我的目標是將查詢更改為:

Select * from MyTable where Column1 = a; Delete from MyTable;

由於原始的選擇查詢是通過java.sql.Statement執行的,

我們怎么做這樣的SQL注入? 如果問題不清楚,請

評論,我將嘗試提供進一步的解釋。

SQL注入指南: Link1Link2 ,但是Stackoverflow中有很多與SQL注入相關的線程,例如Q&A

做一件事,通過-> sql injection java stackoverflow搜索

如果我們將q注入為anything' OR 'x'='x則它將選擇所有容易受到攻擊的列。 之所以這樣,是因為JDBC驅動程序會自動將作為參數傳遞給准備好的語句的變量自動轉義。

盡管Prepared Statements有助於防御SQL Injection,但是通過不當使用Prepared Statements可能會發生SQL Injection攻擊。 下面的示例說明了這種情況,其中輸入變量直接傳遞到Prepared語句中,從而為SQL Injection攻擊鋪平了道路。

查閱本文 ,其中介紹了SQL注入時StatementPreparedStatement以及executeQuery()executeUpdate()行為。

除了經典的DROP表之外,還有更多需要注意的場景,例如:

  • 調用sleep函數,以便所有數據庫連接都將繁忙,因此使您的應用程序不可用
  • 從數據庫中提取敏感數據
  • 繞過用戶認證

不僅SQL會受到影響。 如果不使用綁定參數,則即使JPQL也會受到損害。

最重要的是,在構建SQL語句時,絕對不要使用字符串連接。 為此使用專用的API:

暫無
暫無

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

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