gpt4 book ai didi

php - SELECT 语句中的单个单词是否可以进行 SQL 注入(inject)?

转载 作者:可可西里 更新时间:2023-11-01 14:01:44 25 4
gpt4 key购买 nike

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

SELECT * FROM messages WHERE sender='clean_username'

通过 get/post 接收 clean_username 并像这样清理:

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

以上代码删除了所有空格(除其他外),这意味着 valid_username 参数将始终只有一个单词。

通过注入(inject)利用此漏洞的最简单方法是什么?

我问这个问题是为了更好地理解 SQL 注入(inject)的工作原理。在我的工作中,我坚持使用准备好的语句和参数化查询来防止注入(inject)的既定良好做法,但我认为人们也了解如何在像这样的简单场景中注入(inject)恶意代码是有好处的。

最佳答案

您仍然可以使用十六进制编码来利用它:剥离空格是不够的。 I guess this is a somewhat interesting place to start .但考虑到 preg_match()es 对于高流量网站的性能来说非常糟糕。

准备好的语句和参数化查询始终是防止 SQL 注入(inject)的最佳方法。

使用十六进制编码且无空格的 GET 注入(inject)示例

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

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

关于php - SELECT 语句中的单个单词是否可以进行 SQL 注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28433846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com