[英]Possible SQL injection dropping a table with stored procedure?
鑒於此MySQL存儲過程:
CREATE PROCEDURE customer.`getCustomers5`(
sdf varchar(1000)
)
BEGIN
set @se = concat('select * from customer.customertbl where id=', sdf);
PREPARE stm1 from @se;
EXECUTE stm1;
END;
即使調用此存儲過程的前端使用PDO參數/數據綁定,是否也可以將SQL注入該存儲過程?
我需要在調用它之前動態地建立一個查詢(dynamic where子句)。
如果可以進行SQL注入,是否有任何方法可以解決此問題?
您只是在使用准備好的語句而已。
您必須綁定參數,而不是串聯它們。
DELIMITER //
CREATE PROCEDURE customer.`getCustomers5`(sdf varchar(1000))
BEGIN
PREPARE stm1 from 'select * from customer.customertbl where id=?';
SET @a = sdf;
EXECUTE stm1 using @a;
END//
DELIMITER ;
如果您的參數是varchar並且發送了字符串,那么可以,因為即使使用PDO,它仍然是ANY字符串。
您應該將sdf定義為您的id類型(是否為整數?如果不是,請使其為整數!),然后將對PDO參數進行轉義並避免SQL注入。
好的做法是避免在存儲過程中創建動態查詢,並在應用程序中構建查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.