Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysql\u escape\u字符串整个post数组?_Php_Mysql_Sql_Sql Injection - Fatal编程技术网

Php mysql\u escape\u字符串整个post数组?

Php mysql\u escape\u字符串整个post数组?,php,mysql,sql,sql-injection,Php,Mysql,Sql,Sql Injection,我想知道有没有可能只使用我的$\u sql\u转义字符串来替换整个$\u POST和$\u GET数组,这样就不会遗漏任何变量 不知道如何测试,否则我会自己测试。谢谢 $escaped_POST = array_map('mysql_real_escape_string', $_POST); 不过,我建议您改用。您可以使用 foreach(array_keys($_POST) as $key) { $clean[$key] = mysql_real_escape_string($_POS

我想知道有没有可能只使用我的$\u sql\u转义字符串来替换整个$\u POST和$\u GET数组,这样就不会遗漏任何变量

不知道如何测试,否则我会自己测试。谢谢

$escaped_POST = array_map('mysql_real_escape_string', $_POST);
不过,我建议您改用。

您可以使用

foreach(array_keys($_POST) as $key)
{

  $clean[$key] = mysql_real_escape_string($_POST[$key]);

}

然后使用echo$clean['name']访问post数据

我将使用
数组\u walk()
函数。它更适合,因为它修改了后超全局,所以将来的任何使用都会被消毒

array_walk_recursive( $_POST, 'mysql_real_escape_string' );
但是,请确保不要依赖此线路来完全保护数据库免受攻击。最好的保护是限制某些字段的字符集。例如,电子邮件中没有引号(因此只允许字母、数字、@、破折号等),名称中没有括号(因此只允许字母和选定的特殊字符)

编辑:由于@Johan的建议,将
array\u walk()
更改为
array\u walk\u recursive()
。给他道具。

试试这个

foreach(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\u real\u escape\u string thill

这样您就不能修改$\u POST变量本身了(只是想知道)。比如$\u POST=array\u map('mysql\u real\u escape\u string',$\u POST);?谢谢你的推荐。我第二次听说MySQLi to,我会调查一下,看看它有多困难over@NoviceCoding:可以,但最好不要污染superglobals。是的,您可以覆盖
$\u POST
变量,但如果以后要使用其中一个原始的、未经扫描的值,会发生什么情况?:)嗯,我会使用
array\u walk\u recursive
而不是
array\u map
_就编码礼仪而言,POST可能有数组值。我明白为什么重复使用$\u POST不是一个好主意,但如果这意味着我必须重命名$\u POST上的每个调用,那么如果我只是修改$\u POST,就不会有什么不好的事情发生,对吗?不知道它是如何工作的,但是$\u POST重置正确吗?谢谢。是的,我也在验证每一个领域。escape_string函数中有漏洞吗?没有任何东西可以完全保护您。我一时想不出任何与mysql\u real\u escape\u string有关的具体缺陷。需要记住的一件重要事情是,这不(也不应该)用于清理文件上载,因此您需要采取必要的预防措施(防止空字节黑客攻击等)。-1您应该使用
数组\u walk\u recursive
,因为如果任何$u POST项包含数组,此代码将失败。@Col.Shrapnel不是OP要求的吗?@PhpMyCoder,我认为使用array_walk非常有启发性,因此,如果您想在SQL语句中安全使用,您仍然需要引用数组+1。类似于:
$array=“””。内爆(“,”,$array)。“”应该可以做到这一点,尽管这只适用于一维数组。第二个让人恼火的是,改变超球并不是一个好主意。但是要使用
$var=$\u POST['something']
并从此点开始使用
$var
。对于echo,您使用
htmlspecialchars()
,而不是
mysql\u real\u escape\u string()