提问人:CM Luft 提问时间:2/13/2020 更新时间:2/14/2020 访问量:631
带有参数的存储过程如何防止 SQL 注入
Stored Procedure with parameters how to prevent SQL Injection
问:
我创建了一个存储过程,该存储过程根据用户输入搜索表。我认为这段代码有 SQL 注入的风险,所以我用几个查询进行了测试,我希望删除一个表,但令我惊讶的是,该表没有被删除。我想知道这个查询是否真的没问题,或者我遗漏了什么?
DECLARE @Query VARCHAR(200) = ';DROP TABLE DeleteMe;--'
SELECT f.Name
FROM [Firm] AS f
WHERE f.Name LIKE '%' + @Query + '%';
我尝试了几个查询,都是上述主题的变体。
答:
-2赞
Amin Pashna
2/13/2020
#1
有一些方法可以防止 SQL 注入:
1 使用预准备语句(使用参数化查询)
2-使用存储过程
3-验证用户输入
4-限制权限
5-隐藏错误消息
中的信息 6-更新系统
7-保持数据库凭据分离和加密
8-禁用shell和您不需要的任何其他功能
您可以在这里阅读更多内容:https://tableplus.com/blog/2018/08/sql-injection-attack-explained-with-example.html
评论
3赞
Jeroen Mostert
2/13/2020
如果你“注射”了,有效的最终结果将是 - 这是完全安全的。不要将通过串联创建查询字符串与在运行时通过连接参数值生成字符串混淆。WHERE f.Name LIKE '%%'';select * from sys.tables--%'
评论
PRINT @Query
@Query
EXEC
sp_executesql
@Query