![](/img/trans.png)
[英]Java JDBC Prepared Statement not inserting single quotes (SQL Escaping)
[英]JDBC driver escaping arguments for prepared statement?
作為參數傳遞給預准備語句的變量將由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.