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

2022-08-30 11:37:38

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

$_POST = array_map('filter_var', $_POST);

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

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

目前,我正在使用上述array_map函数进行清理,以及在发送电子邮件之前对电子邮件地址进行FILTER_SANITIZE_EMAIL,然后在插入到数据库之前使用mysql_real_escape_string()转义输入。无需进入准备好的语句等。你认为我应该另外做些什么吗?再次感谢!


答案 1

只需从过滤器扩展中使用即可。filter_input_array()

/* prevent XSS. */
$_GET   = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING);
$_POST  = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);

这将净化您的 和 。$_GET$_POST


答案 2

取决于它的用途。

如果要将其插入数据库,则mysql_real_escape_string()表示带引号的字符串,将类型强制转换为数字将是要走的路 - 理想情况下准备良好的语句,但这是完全不同的问题。

如果您计划将数据输出到网页上,那么我会推荐像htmlspecialchars()这样的东西

如果您计划使用用户输入作为 shell 参数,则可以使用 escapeshellarg()

继续您关于发送电子邮件的问题。好吧,以下内容应该就足够了:

filter_var($_POST['message'], FILTER_SANITIZE_STRING);

所有这一切基本上就是去除标签并对特殊字符进行编码。