我从用户输入中获取一个字符串,并将其在空格上(使用 \w)拆分为一个字符串数组。然后我循环遍历数组,并像这样附加 where 子句的一部分:
query += " AND ( "
+ "field1 LIKE '%" + searchStrings[i] +"%' "
+ " OR field2 LIKE '%" + searchStrings[i] +"%' "
+ " OR field3 LIKE '%" + searchStrings[i] +"%' "
+ ") ";
我觉得这很危险,因为我将用户输入附加到我的查询中。但是,我知道任何搜索字符串中都没有任何空格,因为我将初始输入拆分为空格。
是否可以通过 SQL 注入来攻击它?给予Robert');DROP TABLE students;--
实际上不会丢弃任何东西,因为那里需要有空格。在该示例中,它不会正常运行,但不会造成任何损坏。
任何有更多对抗 SQL 注入经验的人都可以帮助我解决这个问题,或者让我放心吗?
谢谢!
编辑:
哇,这是很多很棒的输入。感谢所有回复的人。我将研究全文搜索,并至少参数化我的查询。
只是为了让我能更好地理解这个问题,如果所有空格和单引号都被转义了,是否可以注入?