我在想是否可以对整个$_POST和$_GET数组使用my_sql_escape_string,这样就不会漏掉任何变量了吗?
不太确定如何测试,否则我自己会测试的。 谢谢!
我在想是否可以对整个$_POST和$_GET数组使用my_sql_escape_string,这样就不会漏掉任何变量了吗?
不太确定如何测试,否则我自己会测试的。 谢谢!
我会使用array_walk()
函数。它更适合,因为它修改了POST超全局变量,所以将来任何使用都经过了消毒处理。
array_walk_recursive( $_POST, 'mysql_real_escape_string' );
然而,请确保不要仅仅依赖这一行代码来完全保护您的数据库免受攻击。最佳的保护措施是为某些字段限制字符集。例如,电子邮件中不包含引号(因此仅允许字母、数字、@、破折号等),而名称中不包含括号(因此仅允许字母和选定的特殊字符)。
编辑:由于@Johan的建议,将array_walk()
更改为array_walk_recursive()
。感谢他。
$escaped_POST = array_map('mysql_real_escape_string', $_POST);
虽然,我建议使用 MySQLi。
$_POST
变量,但是当您稍后想要使用其中一个原始的、未转义的值时会发生什么呢? :) - Kevinarray_walk_recursive
而不是array_map
。_POST可能具有数组值。 - meze您可以使用
foreach(array_keys($_POST) as $key)
{
$clean[$key] = mysql_real_escape_string($_POST[$key]);
}
接下来,要访问提交的数据,请使用echo $clean['name'];
htmlspecialchars()
而不是mysql_real_escape_string()
。 - Johanforeach(array_keys($_GET) as $key){ $_GET[$key] = mysql_real_escape_string($_GET[$key]);}
foreach(array_keys($_POST) as $key){ $_POST[$key] = mysql_real_escape_string($_POST[$key]);}
将 mysql_real_escape_string 整个函数进行转义。
mysql_real_escape_string
感到担忧。需要记住的一件重要的事情是,它不能(也不应该)用于清理文件上传,因此您需要采取必要的预防措施(防止空字节攻击等)。 - Bailey Parkerarray_walk_recursive
,因为如果任何一个 $_POST 项包含一个数组,这段代码将会失败。 - Johan$array = "'".implode("','",$array)."'";
应该可以解决问题,尽管那个只适用于一维数组。第二个小问题是更改超级全局变量不是一个好主意。但是,使用$var = $_POST['something']
并从那时起使用$var
。 - Johan