什么是在PHP中清理整个$ _POST数组的好方法?

Sir*_*irG 34 php arrays sanitization

我有一个包含很多变量的表单,然后发送一封电子邮件,而不是$_POSTfilter_var($_POST['var'], FILTER_SANITIZE_STRING); 一个更简单的代码片段来清理每个值.我想出了下面的内容,这似乎有效,因为我相信默认操作是FILTER_SANITIZE_STRING,但我只是想知道人们的意见是什么,如果这不是好的做法,也许你可以告诉我为什么?$_POST然后将这些值单独嵌入到新变量中,因此我只会在开始时使用array_map来清理所有内容......

$_POST = array_map('filter_var', $_POST);
Run Code Online (Sandbox Code Playgroud)

感谢您的回复,为您提供更多信息,基本上:

我在一个表单中有20-30个输入字段被捕获,然后数据显示给用户检查输入,然后对变量进行清理,然后向用户发送电子邮件,最后将详细信息输入到数据库中.

目前我正在使用上面的array_map函数清理,以及在发送电子邮件之前使用电子邮件地址上的FILTER_SANITIZE_EMAIL,然后在插入数据库之前使用mysql_real_escape_string()转义输入.没有准备好的陈述等等.你认为我应该做什么吗?再次感谢!

joh*_*ers 77

如果每个输入变量的类型都是一个字符串,并且您想要一次性清理它们,则可以使用:

// prevent XSS
$_GET   = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING);
$_POST  = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
Run Code Online (Sandbox Code Playgroud)

这将清理你的$ _GET和$ _POST数组.

在这里看到:PHP -Sanitize数组的值


Rus*_*ias 19

取决于它的用途.

如果你将它插入到数据库中,那么mysql_real_escape_string()对于引用的字符串和数字类型转换将是最佳选择 - 理想的准备语句,但这是完全不同的事情.

如果您打算将数据输出到网页上,那么我会推荐类似的东西 htmlspecialchars()

如果您打算将用户输入用作shell参数,那么您将使用 escapeshellarg()

转到关于发送电子邮件的问题.那么,以下就足够了:

filter_var($_POST['message'], FILTER_SANITIZE_STRING);
Run Code Online (Sandbox Code Playgroud)

所有这些基本上都是条带标签和编码特殊字符.

  • 如果您使用 PHP 7 或更高版本,则“mysql_real_escape_string()”函数已被删除。请改用 PDO。(将此问题发布给新访客。) (3认同)

Pek*_*ica 5

没有正确的方法来进行全面的卫生设施.您需要什么样的卫生方法取决于对数据的处理方式.

在使用数据之前直接清理数据.