避免使用非参数化查询进行SQL注入

塔卡里

我知道参数化查询的工作原理,并且在我到目前为止编写的每个非硬编码查询中都使用了它们,但是在编写一个函数来创建动态查询(出于测试目的)时,我质疑它是否真的可以安全使用按原样使用

string sql = "SELECT * FROM Table WHERE";

string fullstring = "The quick brown fox jumped over";
string[] words = fullstring.Split(' ');

foreach (string item in words)
{
    sql = sql + " Column LIKE '%" + item + "%' AND";
}

sql = sql.Remove(sql.Length - 3);

如果我将其转换为查询,结果将是

SELECT * FROM Table WHERE Column LIKE '%the%' AND Column LIKE '%quick%' AND Column LIKE '%brown%' AND Column LIKE '%fox%' AND Column LIKE '%jumped%' AND Column LIKE '%over%' 

现在我仍然很确定由于缺少参数,这仍然容易受到注入攻击的影响,但是我不确定由于分隔符是一个空格字符,使得像每个字符一样SELECT * FROM TABLEDROP TABLE无法写入字符串的原因被分成自己的字符串,即。SELECT*FROMTABLE

谁能进一步启发我?

(请注意,不打算将其用作适当参数的替代方法,只是试图理解)

Damien_The_Unbeliever
select"name"from"sys"."columns"

我可以编写一个查询示例,该示例可以写为SQL Server将处理并且不包含空格。

所以,就说不。


这是另一个示例,它以“注入”形式显示了另一种绕过“无空格”的方式:

select name from sys.columns where name like '%a'union/**/all/**/select/**/name/**/from/**/sys.objects

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

可以对SQL透视查询进行参数化以避免SQL注入吗?

仍然使用PDO参数化查询对sql注入进行了黑客攻击

在Rails中使用参数进行非模型SQL查询

格式化SQL查询以避免SQL注入

避免使用connection.execute进行SQL注入

如何避免在Npgsql中使用Update命令进行SQL注入?

使用OFFSET子句进行参数化查询

在JUnit参数化测试中使用非静态注入服务

如何使用Spring进行参数化依赖注入?

避免在MS Access中进行SQL注入

在WHERE子句中使用DecryptByKey进行SQL参数化查询(VB.Net前端)

如何使用参数化查询更新SQL?

使用LIKE'%的SQL参数化查询?%'PHP

使用R RODBC参数化SQL查询

避免使用system()API进行命令注入

使用 raw(...) 进行 SQL 格式化/转义注入

参数化sql查询

参数化SQL查询不返回数据;非参数查询返回正确的值

用于数据库备份的SQL参数化查询由sonarqube报告为sql注入

显示如何参数化sql查询以防止sql注入攻击的示例

使用参数化查询进行返工C#

如何动态准备SQL查询(也是列名),避免SQL注入

改进 SQL INSERT 查询以避免 sql 注入

使用python使用可选参数进行SQL查询

在SQL注入中,“参数化查询/预备语句”与逃避用户输入相比如何更好

是否在没有参数化查询的情况下阻止PHP中的SQL注入?

在C#中使用参数进行动态SQL查询

优化SQL查询,使用不同的参数进行多次选择

使用参数更快地进行 T-Sql 查询