我最近學會了不使用PreparedStatements的.set()方法是一個相當巨大的安全漏洞。PreparedStatements的安全性如何?
看過一些代碼示例後,我有幾個關於PreparedStatements及其安全性的問題。
如果有人可以攻擊MySQL查詢來更改數據,PreparedStatement的.set()方法到底如何防止攻擊?
例如,如果查詢是
INSERT INTO table_name(?, ?);
(假設這兩個問號將字符串)
不能有人簡單地將表名更改爲另一個表?
又如: 如果查詢
UPDATE table_name SET column_name=?;
無法一個人改列名進行查詢改變目前存在的列?
我能想到的最後一個例子; 如果查詢
SELECT column_name FROM table_name WHERE column2_name = ?;
是否有可能爲攻擊者修改列名,表名等,或注入其他動作到查詢?你可能會說,我對安全性和MySQL知之甚少,所以如果這些問題是非常明顯的問題,不好意思。謝謝!
好的。所以它的要點是SQL注入攻擊只能修改查詢中發送的數據,而不是查詢本身?那MITM攻擊實際上能夠修改查詢? (感謝您的答覆btw)。 –
一個成功的SQL注入攻擊會暗示你的數據是查詢字符串本身的一部分,並且這個漏洞是查詢做了你不打算的事情,而不僅僅是不正確的數據進入數據庫。如果數據與查詢分離,那麼任何惡意輸入都只是數據的一部分。如果攻擊者能夠讀取和修改數據,MITM可能會影響您的應用程序通過攻擊者的任何內容。 (但請注意,只讀MITM仍然很危險。) – jbafford