簡體   English   中英

JDBC驅動程序轉義准備語句的參數?

[英]JDBC driver escaping arguments for prepared statement?

關於在Java中預防SQL注入OWASP頁面

作為參數傳遞給預准備語句的變量將由JDBC驅動程序自動轉義。

我理解准備語句如何分離用戶輸入作為參數內容處理而不是作為SQL命令的一部分。 但我偶然發現了上面引用的句子,我想知道所有逃避的事情是什么。 這有助於防止注射攻擊?

假設你的陳述是

"select * from foo where name = '" + name + "'";

現在,如果名稱變量恰好是O'Reilly,則最終會得到以下SQL查詢,該查詢無效:

select * from foo where name = 'O'Reilly'

請改用預先准備的聲明:

"select * from foo where name = ?"

然后,驅動程序將正確綁定參數作為字符串,並且O'Reilly中的單引號不會被解釋為在'O處開始的字符串的結尾。

在這個簡單的情況下,不使用預准備語句將“僅”導致您的應用程序中出現異常。 但如果有人使用像這樣的名字

' or 1 = 1 or name <> '

查詢將成為

select * from foo where name = '' or 1 = 1 or name <> ''

因此查詢將加載表的每一行。 這就是SQL注入的全部內容。

暫無
暫無

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

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