2012-01-23 44 views
0

我看到了一些类似的问题,没有关于mysql ...
有没有办法做一个SQL注入SP? 我如何在SP级别上进行保护?
换句话说,SP中的查询结构可以通过传入参数以任何方式修改吗?
如果我发送到存储过程中参数“1; DELETE FROM用户; - ” 和查询:是否可以使用存储过程执行sql注入?

select * 
from T 
where = @p 
+0

什么是您的编程媒介?如果你担心它直接发生,防止sql注入是多余的。 –

+0

@布里安格雷厄姆 - 我使用PHP,你的意思是最好的方法是通过PDO消毒这个? –

+0

假设用户界面是一个Web界面,你会在输入字段上执行html编码或javascript编码。如果它是一个桌面应用程序,你可以做类似的事情,我会想象。如果您担心存储过程本身的sql注入,那么这是一个不同的问题。也许编写一些自定义的正则表达式并在将它们传递给sql命令之前通过它们运行变量。 – Brian

回答

5

SQL注入是,基本上,增加额外的代码来查询。攻击本身的发生是因为服务器将输入数据解析为SQL代码并相应地执行它。您无法在SP级别上进行保护,因为执行到达该过程时,攻击已经成功。

因此,只要您将查询构建为文本,无论查询文本是什么,SQL注入都是可能的。如果你不这样做,或者如果你正确地处理你的输入,那么SQL注入不应该成为一个问题,不管它是SELECT还是别的。

+0

其实这是一个很好的答案。如果在你的存储过程中,你通过CONCAT()创建来自参数(或其他外部源)的字符串的查询,那么这个SP很容易被注入。否则你很安全。 – Mchl

相关问题