2012-09-19 42 views
0

我们正在使用的查询,如下所示:什么可能是以下查询的SQL注入字符串?

FROM users u INNER JOIN FETCH u.roles where u.password='" + password + "'" + " AND u.username='" + username + "'"; 

为了防止SQL注入,我们使用正则表达式过滤“用户名”,只有允许的字符,如“^[A-ZA-Z0的白名单-9] * $“和‘密码’字段中,我们使用的是支票,例如,

if(password.indexOf("'") != -1) { Sql injection attack } 

是否有攻击者绕过我们用于发射成功的SQL注入攻击检查什么方法?

我们正在使用MySQL V5.1

感谢,

+1

为什么不直接使用公认的SQL注入问题解决方案之一,比如预准备语句,ORM或存储过程?比试图将“坏”字符列入白名单要容易得多。 –

+2

为什么要跳过所有这些箍环以避免正确地查询查询? –

+0

顺便提一句,因为你有一个INNER JOIN,没有任何角色但是有效密码的用户将被你的查询视为与错误地输入密码的用户相同的方式... –

回答

1

看到,因为它似乎主持人不同意我告诉你提高你的代码,简单的答案是“是的,有一个上述代码中的缺陷“。

+0

@podilska:你能让我知道上面代码中的缺陷以及攻击者如何利用它? – user1402373

+0

上述代码中的缺陷是您正在使用外部数据构建S​​QL语句。您需要使用参数化查询,以便您的数据和SQL保持彼此分开。 http://bobby-tables.com/有很多关于如何做参数化查询的例子,基于你写的任何语言。 –

相关问题