作者:海岛迷情 | 来源:互联网 | 2023-05-22 16:39
假设您有一个如下所示的查询:
SELECT * FROM messages WHERE sender='clean_username'
clean_username
收到/收到的地方,并像这样清理:
$clean_username = preg_replace( '/[^A-Za-z0-9_]+/m' , '', $dirty_username );
上面的代码删除了任何空格(以及其他内容),这意味着valid_username参数将始终只是一个单词.
注射可以利用这种方法最简单的方法是什么?
我问这个问题是为了更好地理解SQL注入的工作原理.在我的工作中,我坚持使用准备好的语句和参数化查询以防止注入的既定良好实践,但我认为人们也应该了解如何在这样的简单场景中注入恶意代码.
1> geggleto..:
您仍然可以使用十六进制编码来利用它:剥离空间是不够的.
我想这是一个有趣的起点.但是考虑到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))#
我想你可以看到上面的问题.