我们正在使用的查询,如下所示:什么可能是以下查询的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
感谢,
为什么不直接使用公认的SQL注入问题解决方案之一,比如预准备语句,ORM或存储过程?比试图将“坏”字符列入白名单要容易得多。 –
为什么要跳过所有这些箍环以避免正确地查询查询? –
顺便提一句,因为你有一个INNER JOIN,没有任何角色但是有效密码的用户将被你的查询视为与错误地输入密码的用户相同的方式... –