mySQL:存储过程比查询更安全?

mySQL:存储过程比查询更安全?,mysql,sql,stored-procedures,Mysql,Sql,Stored Procedures,我有一个使用mySQL数据库的网站,我想做一些常见的任务,比如添加用户,修改他们的信息,等等。我可以通过常规查询完美地完成。我正在使用准备好的语句来增加安全性。 我应该使用存储过程来增加安全性,还是结果相同?我认为这可能是使用存储过程,我可以限制可能的攻击者与实际查询的直接交互。我错了?我想这取决于你用的是什么语言。在大多数语言中,使用带有包含所有要执行的sql的sql字符串的预处理语句,或使用带有执行存储过程的sql字符串的预处理语句大致相当。语言应该注意准备好的语句周围的安全性。例如,C将验

我有一个使用mySQL数据库的网站,我想做一些常见的任务,比如添加用户,修改他们的信息,等等。我可以通过常规查询完美地完成。我正在使用准备好的语句来增加安全性。
我应该使用存储过程来增加安全性,还是结果相同?我认为这可能是使用存储过程,我可以限制可能的攻击者与实际查询的直接交互。我错了?

我想这取决于你用的是什么语言。在大多数语言中,使用带有包含所有要执行的sql的sql字符串的预处理语句,或使用带有执行存储过程的sql字符串的预处理语句大致相当。语言应该注意准备好的语句周围的安全性。例如,C将验证输入,因此sql注入漏洞将大大减少,除非您准备的语句编写得非常糟糕,以至于将其输入为坏的但预期的,即1 vs 0变量将显著改变结果集。但是,其他语言可能不提供相同级别的验证,因此,这可能有一个优势,具体取决于存储过程的外观

使用存储过程对于可维护性来说更好,但是假设程序一开始就经过了适当的设计,那么在很多情况下,存储过程都不会提供任何形式的安全级别更改。我脑海中唯一能想到的例子是一个存储过程,它从用户输入中获取原始sql字符串,然后对数据库执行该sql。这实际上比使用准备好的语句更不安全,除非您竭尽全力验证可接受的输入,在这种情况下,您最好首先有一个非常好的理由使用这样一个存储过程


基本上,我所说的可以归结为这样一个事实,即您需要阅读关于准备好的语句的语言文档,并确定使用准备好的语句可能存在哪些漏洞(如果有的话),在您的特定场景中,是否可以通过切换到调用存储过程的预处理语句而不是直接执行sql查询来消除这些问题。

如果存储过程设置正确,结果将是相同的


似乎有一篇相当不错的评论。尽管我绝不会建议你自己尝试逃避用户输入。他们提到这一点是因为选项3

我删除了mysqli标签。具体的API与此问题无关。