如何清理变量以防止sql注入 - union select?

时间:2012-05-12 01:49:31

标签: php mysql sql sql-injection

我已经阅读了很多文件来防止sql注入。 他们说使用PDOmysql_real_escape_string

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

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

$mb_id执行mysql_real_escape_string$my_option可能不会。 所以我想使用像clean_sql()这样的php函数清理所有$_GET$_POST$_REQUEST varibales。

clean_sql()清除所有sql语句 当$ my_option值为“1”时,联合选择*来自g4_member,其中mb_id ='admin'“

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

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

1 个答案:

答案 0 :(得分:3)

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

当然,您应该更进一步,在尝试将数据保存到数据库之前验证并清理用户提供的数据filter_var()ctype_*等功能是验证和/或清理数据的简便方法。