PHP5中的新的mysqli扩展(参考http://php.net/mysqli),就象mysql一样,内在地也不支持多个查询,不过却提供了一个mysqli_multi_query()函数以支持你实现多查询-如果你确实想这样做的话。 中国.站.长站
然而,对于SQLite-与PHP5绑定到一起的可嵌入的SQL数据库引擎(参考http://sqlite.org/和http://php.net/sqlite)情况更为可怕,由于其易于使用而吸引了大量用户的关注。在有些情况下,SQLite缺省地允许这样的多指令查询,因为该数据库可以优化批查询,特别是非常有效的批INSERT语句处理。然而,如果查询的结果为你的脚本所使用的话(例如在使用一个SELECT语句检索记录的情况下),sqlite_query()函数却不会允许执行多个查询。
三、 INVISION Power BOARD SQL注入脆弱性
Invision Power Board是一个著名的论坛系统。2005年五月6号,在登录代码中发现了一处SQL注入脆弱性。其发现者为GulfTech Security Research的James Bercegay。 Www_Chinaz_com
这个登录查询如下所示: 中国.站长站
| 以下为引用的内容: $DB->query("SELECT * FROM ibf_members WHERE id=$mid AND password=''$pid''"); 站长.站 |
其中,成员ID变量$mid和口令ID变量$pid被使用下面两行代码从my_cookie()函数中检索出:
中.国.站.长.站
| 以下为引用的内容: $mid = intval($std->my_getcookie(''member_id'')); |
在此,my_cookie()函数使用下列语句从cookie中检索要求的变量:
Chinaz~com
| 以下为引用的内容: return urldecode( 在PHP中全面阻止SQL注入式攻击作者:凯旋网络来源:凯旋网络
|
【注意】从该cookie返回的值根本没有被处理。尽管$mid在使用于查询之前被强制转换成一个整数,但是$pid却保持不变。因此,它很容易遭受我们前面所讨论的注入类型的攻击。 Www.Chinaz.com
因此,通过以如下方式修改my_cookie()函数,这种脆弱性就会暴露出来:
中.国.站.长.站
| 以下为引用的内容: if ( ! in_array( $name,array(''topicsread'', ''forum_read'',''collapseprefs'') ) ) 在PHP中全面阻止SQL注入式攻击作者:凯旋网络来源:凯旋网络
} else { return urldecode( 在PHP中全面阻止SQL注入式攻击作者:凯旋网络来源:凯旋网络
} 中国站.长站 |
经过这样的改正之后,其中的关键变量在"通过"全局clean_value()函数后被返回,而其它变量却未进行检查。
Chinaz
现在,既然我们大致了解了什么是SQL注入,它的注入原理以及这种注入的脆弱程度,那么接下来,让我们探讨如何有效地预防它。幸好,PHP为我们提供了丰富的资源,因此我们有充分的信心预言,一个经仔细地彻底地使用我们所推荐的技术构建的应用程序将会从你的脚本中根本上消除任何可能性的SQL注入-通过在它可能造成任何损坏之前"清理"你的用户的数据来实现。
站.长.站
四、 界定你的查询中的每一个值 中.国.站.长.站
我们推荐,你确保界定了你的查询中的每一个值。字符串值首当其冲,以及那些你通常
