★用存储过程防止SQL注入是笑话吗?

newdigitime newdigitime 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
以前和大家一样,听人说用存储过程+参数能防止SQL注入,听的多了,也就深信不疑,
就算不是绝对的,至少也有很强大的防御力吧。很多人说自从用了参数+存储,不必过滤字符了,腰也不痛了。

今天仔细想了想,在“代码中用变量拼接组合SQL命令”的确危险,有漏洞。
但“存储过程+参数”实质不是一样的吗,虽然传递过程两者有区别,一个是传递组合好的SQL命令字符串,
一个是传递 "存储过程名+参数",不过到了数据库,在存储过程的代码中,最终不是还要将这些参数组合拼接成
一段SQL命令吗?
就好比一个炸弹,一种方法是直接把成品运到某处,另一个是把炸弹的各零件运到某处,某处再拼合,最终还是炸弹

譬如:
string myname="a' or 1=1";
在代码中拼接SQL命令:
mysql="select * from table where name='"+myname+"'";
即mysql= "select * from table where name='a' or 1=1";

如果我们用参数+存储的方式:
@p1="a' or 1=1"
set @sql="select * from table where name='"+[@p1]+"'"
exec(@sql)
这样exec(@sql)难道不等效于 exec (select * from table where name='a' or 1=1) 吗?
如果是,那和在代码中组合SQL命令有何区别?

搜了一下资料,说参数+存储安全性高的大有人在,但认为参数+存储在安全性上并没多大意义的人也不少
,他们认为仍需要进行严格的字符过滤。大家上网搜一下就能看到了。

实在是很困惑,请大家各持己见。谢谢。尽量不要用“可以,因为参数是传值”或"你不了解参数的意义"等空洞的回答,再次感谢。
...全文

相关推荐

mybatis如何防止SQL注入

mybatis如何防止SQL注入

IT民工_GG

mybatis防止SQL注入的方法实例详解

SQL注入是一种很简单的攻击手段,但直到今天仍然十分常见。那么mybatis是如何防止SQL注入的呢?下面脚本之家小编给大家带来了实例代码,需要的朋友参考下吧

weixin_38523251

Java防止SQL注入的几个途径

Java防SQL注入,最简单的办法是杜绝SQL拼接,经验和技巧之谈,不错推荐。

lx76939412

Mybatis防止sql注入的实例

本文通过实例给大家介绍了Mybatis防止sql注入的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下

weixin_38625048

SQL注入原理以及Spring Boot如何防止SQL注入(含详细示例代码)

SQL注入是一种针对数据库的攻击技术,攻击者通过在应用程序的输入字段中插入或“注入”恶意的SQL代码,从而在数据库服务器上执行非授权的SQL查询。这种攻击可能导致数据泄露、数据篡改、甚至执行任意命令。 SQL注入的原理是攻击者通过在应用程序的输入字段中插入或“注入”恶意的SQL代码,从而绕过应用程序的安全机制,直接对数据库进行查询或操作。当应用程序没有对用户输入进行适当的验证和过滤时,攻击者可以注入恶意的SQL代码,导致应用程序执行非预期的数据库操作。 具体来说,当应用程序使用动态SQL语句构建查询时,它会将用户输入直接拼接到SQL语句中。如果应用程序没有对用户输入进行适当的验证和过滤,攻击者可以注入恶意的SQL代码片段,改变原始SQL语句的结构和意图。通过注入恶意的SQL代码,攻击者可以绕过应用程序的身份验证、读取敏感数据、修改数据、执行任意命令等。

孤蓬&听雨
评论 196
收藏 已收藏
分享
返回顶部
newdigitime
.NET社区 62,272 成员 668,968 内容