sql - like 语句是否会吸引 SQL 注入
问题描述
下面提到的 like 语句是否会产生任何安全问题或 SQL 注入。如果是,如何降低风险?
以下脚本将在存储过程中执行;使用like
查询的推荐方法是什么?
此代码片段是从参数化存储过程中复制的。
declare @args varchar(100) ='SID%' -- start with
-- set @args ='SID01' -- exact match
-- set @args ='%%' -- all
-- set @args = '%VV%' -- contains
-- set @args ='SID%' -- start with
-- set @args ='%JUN' -- end with
select * from Employee e where e.LastName like @args
解决方案
如果您在 SQL 中使用类型化变量作为参数,您就可以免受 SQL 注入攻击。当攻击者可以访问动态 SQL 时,SQL 注入就会起作用。
这是不安全的:
DECLARE @sql nvarchar(50)=N'select * from Employee e where e.LastName like '''+@args+''''
EXEC sys.sp_executesql @sql
这是安全的:
select * from Employee e where e.LastName like @args
推荐阅读
- ruby-on-rails - 如何保存在 Rails 中动态创建的对象的顺序
- javascript - 访问特定屏幕时 React Native 应用程序崩溃
- android - 使用 Ionic 5 和电容器设置 BranchIo
- typescript - TypeScript 编译器如何生成浏览器可以理解的输出 JS 文件?
- c# - C#.net 在文本中搜索特定字母并添加(零宽度非连接符)以 Unicode 编码为 U+200C
- svn - 什么是与 TortoiseSVN 清理选项等效的 svn 命令行,可以清除所有本地更改?
- python-3.x - Python 数字三角形
- html - 我怎样才能让字体真棒图标没有文字装饰?
- java - 如何从字符串中删除尾随逗号(Java)
- python - 熊猫数据框操作以总结天数,直到出现某些状态