簡體   English   中英

可能的SQL注入會刪除帶有存儲過程的表?

[英]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.

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