可以在SELECT语句中使用单个单词进行SQL注入吗?

Coe*_*aar 5 php mysqli sanitization sql-injection

假设您有一个如下所示的查询:

SELECT * FROM messages WHERE sender='clean_username'
Run Code Online (Sandbox Code Playgroud)

clean_username收到/收到的地方,并像这样清理:

$clean_username = preg_replace( '/[^A-Za-z0-9_]+/m' , '', $dirty_username );
Run Code Online (Sandbox Code Playgroud)

上面的代码删除了任何空格(以及其他内容),这意味着valid_username参数将始终只是一个单词.

注射可以利用这种方法最简单的方法是什么?

我问这个问题是为了更好地理解SQL注入的工作原理.在我的工作中,我坚持使用准备好的语句和参数化查询以防止注入的既定良好实践,但我认为人们也应该了解如何在这样的简单场景中注入恶意代码.

geg*_*eto 5

您仍然可以使用十六进制编码来利用它:剥离空间是不够的. 我想这是一个有趣的起点.但是考虑到preg_match()在高流量站点上的性能非常糟糕.

准备语句和参数化查询始终是防止SQL注入的最佳方法.

使用十六进制编码并且没有空格的GET注入示例

?id=(1)and(1)=(0)union(select(null),group_concat(column_name),(null)from(information_schema.columns)where(table_name)=(0x7573657273))#
Run Code Online (Sandbox Code Playgroud)

我想你可以看到上面的问题.