它们比做像mysql_query("SELECT important_data FROM users WHERE password = $password")
这样的东西更容易受SQL注入的影响吗?SQL存储过程是否安全?
回答
他们比你所做的更安全。您的查询将原始SQL发布到数据库,这意味着您的参数不被视为sql参数,而是作为普通的旧sql。
这是我的意思。
使用存储过程的密码变量不能是sql,它必须是系统正在查找的一条信息。在您的例子什么是真正发送到DB是
SELECT * FROM用户其中password =( '您的密码在这里' - $密码变量).....所以有人能做到像
SELECT *从用户WHERE密码=('您的密码在这里';选择*从用户 - $密码变量)。
或更糟糕的是:
SELECT * FROM用户WHERE密码=( '你的密码在这里'; DROP DATABASE DATABASE_NAME - $ password变量)。
非动态sql存储过程不会允许这样做,因为输入参数不会作为额外的sql执行。
参数化的SQL确实照顾到了这一点,但技术上存储过程仍然更安全一些,因为访问表中的信息的用户不需要读取访问权限。它只需要能够执行存储过程。根据您的需要,这可能会或可能不会发挥作用。
所以基本上,使用存储过程使所有输入值不可执行,而使用原始SQL允许将数据解释为代码。得到它了。 – Green 2012-10-24 17:54:25
大部分是的,你可以使用参数化的sql并在那里获得相同的好处,并且你可以编写存储过程来执行动态代码,这样你就可以撤销你从中获得的安全性,但总之是肯定的。 – kemiller2002 2012-10-24 18:09:13
没有安全技术。技术只能用于安全或不安全的方式。
也就是说,存储过程需要稍微更多的创意编码才能允许SQL注入 - 尽管如此。在我意识到的任何SQL数据库引擎中,没有什么能够阻止你连接字符串。
不一定,你可以在里面做字符串连接,并且曝光会相同。如果你使用动态sql和参数变量(没有字符串连接来产生SQL),你会得到很好的保护。
如果他们正确参数,你是不是在做动态SQL那么他们更安全,你也只要您使用参数,不使用字符串连接的用户受益于执行计划重用
输入的值,不会有SQL注入的风险。存储过程在这方面有点“更安全”,因为它们鼓励你使用参数。但是,如果在你的程序做一些像
EXECUTE 'SELECT important_data FROM users WHERE password = ' + @password
然后你会回到原点1,并非常容易受到SQL注入。
此外,还有一种“预先准备的语句”,它不是存储过程,但也可以使用参数。因此它们可以用来避免SQL注入。
- 1. 这个存储过程是否安全,避免SQL注入?
- 2. 该存储过程是否安全的从sql注入?
- 3. 存储过程表安全
- 4. 该存储过程是否线程安全? (或任何equiv在SQL Server上)
- 5. 存储过程vs无存储过程 - 安全视点
- 6. 从SQL注入中制作SQL Server存储过程安全
- 7. SQL存储过程的多线程安全
- 8. 是否安全地存储getContext的值
- 9. HTML5会话存储是否安全?
- 10. 存储在线程安全集合线程中的对象是否安全?
- 11. 安全传输存储过程
- 12. 安全存储过程更新
- 13. SQL Server中的触发器和存储过程安全性
- 14. SQL SERVER在存储过程内部更改安全性问题
- 15. 存储过程检查是否全年存在于表
- 16. SQL Server 2005安装存储过程
- 17. 修改存储过程是否更新存储过程定义?
- 18. 将UI线程的TaskScheduler存储在字段中是否安全?
- 19. 是否WCF缓存存储过程
- 20. SQL存储过程
- 21. 存储过程/ SQL
- 22. SQL存储过程
- 23. SQL存储过程
- 24. SQL存储过程
- 25. SQL存储过程
- 26. 如何检查SQL Azure中是否存在存储过程?
- 27. SQL Server - 是否有可能逐步通过存储过程
- 28. SQL Server触发器中的存储过程调用是否隐含线程安全和原子?
- 29. 是否有可能在Sql服务器级别创建全局存储过程
- 30. 是否应将源代码管理中的SQL存储过程存储?
这是容易被SQL注入的CLASSIC方法 - 将东西连接在一起形成一个SQL语句并且不验证任何用户输入(例如对于$ password)。 – 2009-06-21 14:52:23
是的,我认为这就是reyjavikvi所说的:使用数据库存储过程比使用示例中构造的SQL查询更安全。 – cheduardo 2009-06-21 15:04:26