2010-06-17 74 views
4

使用準備語句和mysqli_stmt_bind_param時是否仍存在注入風險?mysqli_stmt_bind_param SQL注入

例如:

$malicious_input = 'bob"; drop table users'; 
mysqli_stmt_bind_param($stmt, 's', $malicious_input); 

在幕後做mysqli_stmt_bind_param通過這個查詢字符串到MySQL:

SET @username = "bob"; drop table users"; 

抑或是通過API執行SET命令,或者使用某種類型的保護爲了防止這種情況發生?

回答

5

它使用C API,所以在這種情況下,SQL注入是沒有機會的。

17

綁定參數的好處是它消除了SQL注入中最薄弱的環節:字符串連接

而不是通過拼接字符串片段來構建SQL語句 - 其中許多可能來自外部來源,例如直接用戶輸入 - 參數化允許我們在整個過程中保持數據分離,消除注入風險。

這就像走到街上的熱狗販子說:「我想要一個熱狗和一袋薯片,但是,下一個隨機的陌生人會告訴我們哪三個調味品會繼續那隻狗。「他準備取出一隻熱美味的狗,放入一個麪包,並從機架上取出一袋薯條。

一個陌生人逛,問他把芥末番茄醬津津有味,給我所有的錢拿出來登記的。供應商不會提交這筆錢,而會說:「我沒有調味品relish and give me all the money out of the register」。他準備向狗添加三種調味品,並且不會做任何其他事情。