Jav*_*ier 1 sql stored-procedures sql-injection
它们不像SQL注入那样容易受到攻击mysql_query("SELECT important_data FROM users WHERE password = $password")吗?
它们比你正在做的更安全.您的查询是将原始SQL发布到db,这意味着您的参数不被视为sql参数,而是作为普通的旧sql.
这就是我的意思.
使用存储的prococedure,密码变量不能是sql,它必须是系统正在寻找的一条信息.在您的示例中,实际发送到数据库的是什么
SELECT*FROM用户where password =('你的密码在这里' - $密码变量).....所以有人可以做类似的事情
SELECT*FROM user WHERE Password =('您的密码在这里'; SELECT*FROM User - $ password变量).
或者更糟糕的是:
SELECT*FROM user WHERE Password =('your password here'; DROP Database Database_Name - $ password variable).
非动态sql存储过程不允许这样做,因为输入参数不会作为额外的sql执行.
参数化SQL确实可以解决这个问题,但技术上存储的过程仍然更加安全,因为访问表中信息的用户不需要读取访问权限.它只需要能够执行存储过程.根据您的需要,这可能会也可能不会发挥作用.