我正在使用其他人生成的數據庫(並且我沒有真正授權對其進行更改)。然而,正如我一直在尋找到數據庫中的存儲過程,我注意到以下步驟:爲已存儲的MySQL數據庫過程輸入消毒
DELIMITER $$
CREATE PROCEDURE `logIn`(userName varChar(50), userPass varChar(50))
BEGIN
declare userID int;
SELECT
u.userID INTO userID
FROM
users u
WHERE
u.userName=userName
AND u.userPassword=MD5(userPass);
IF (IFNULL(uID,-1) > 0) THEN
select 1 as outMsg;
ELSE
select 0 as outMsg;
END IF;
END$$
具有三列對應的表users
:userID INT
,userName VARCHAR(50)
和userPassword VARCHAR(50)
。
因爲我不是很擅長這個,有人能讓我知道這樣一個函數的輸入是否需要消毒,因爲不允許任何SQL注入,如果不是 - 爲什麼?一般的經驗法則將非常感激。
P.S.這個函數將從表單提交的JS腳本中調用。
該過程本身並不脆弱,因爲參數'uName'和'uPass'將被RDBMS正確處理,並且您沒有執行動態SQL字符串。但是,如何在代碼中調用procedure_可能會很脆弱......我們需要了解這一點。 –
使用某些服務器端語言篩選器 –
使用JavaScript清理輸入永遠不會安全。這必須在服務器上完成。 –