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

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

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在高流量站点上的性能非常糟糕.

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

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

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

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

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...