1

我已经阅读了许多防止 sql 注入的文档。他们说使用PDOand mysql_real_escape_string

我编写 BBS 代码(旧式...),人们使用我的 BBS 代码,执行一些简单的代码,例如:

select * from $g4[member_table] where mb_id='$mb_id' and mb_1='$my_option'

$mb_idmysql_real_escape_string$my_option不做。所以我想使用像 clean_sql() 这样的 php 函数来清理所有$_GET, $_POST, $_REQUESTvaribales。

clean_sql() 当 $my_option 值为 "1' union select * from g4_member where mb_id='admin'" 时清除所有 sql 语句

请让我知道像 clean_sql() 这样的函数?

=== clear_sql 必须与 php 4.x 一起使用。

4

1 回答 1

3

无论您是否使用 UNION,SQL 注入的最佳实践都是相同的。$_POST,$_GET$_REQUEST任何其他形式的用户提供的数据也是如此。使用准备好的语句(通过 PDO 或 MySQLi)或mysqli_real_escape_string().

当然,您应该更进一步,在尝试将用户提供的数据保存到数据库之前对其进行验证和清理。filter_var()类似和的函数ctype_*是验证和/或清理数据的简单方法。

于 2012-05-12T01:50:48.620 回答