【发布时间】:2012-12-04 12:30:06
【问题描述】:
我正在使用其他人制作的数据库(我并没有真正的更改它的授权)。但是,当我查看数据库中的存储过程时,我注意到了以下过程:
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 注入,如果不需要 - 为什么?非常感谢一般的经验法则。
附:此函数将在表单提交时从 JS 脚本调用。
【问题讨论】:
-
过程本身不易受到攻击,因为参数
uName和uPass将由RDBMS 正确处理,并且您没有执行动态SQL 字符串。但是,您如何在代码中调用该过程可能会受到攻击......我们需要看到这一点。 -
使用一些服务器端语言过滤器
-
用 javascript 清理输入永远不会安全。这必须在服务器上完成。
标签: mysql sanitization