将$ _POST清除为$ _POST或作为另一个变量

1 php security post

我用PHP邮寄表单输入.

我应该这样做:

$_POST['whatever'] = function_to_remove_control_characters($_POST['whatever']);
Run Code Online (Sandbox Code Playgroud)

要么

$whatever = function_to_remove_control_characters($_POST['whatever']);
Run Code Online (Sandbox Code Playgroud)

在我的脚本开头?

为什么?

(在输入通过邮件发送或输出到HTML之前,我进一步过滤和/或转义.)

IMS*_*SoP 6

重要的是要记住,在字符串中没有"逃避一切",不同的上下文需要不同的转义.因此,转义字符串以在SQL中使用的函数与转义它以在HTML中使用或在电子邮件正文中使用的函数不同.

因此,您的转义应该尽可能晚地发生,您将文本用于特定目的,而不是一旦您收到用户的输入.同样,您不希望在应用了不同的转义时覆盖相同的变量 - 例如,您可能希望在HTML模板和纯文本电子邮件中使用它,因此希望htmlspecialchars()在一个地方而不是另一个地方应用.

这导致第二种方法,使用局部变量,是更好的方法,因为重写$_POST意味着对用户的输入进行全局更改,这可能在代码的其他地方不适用.

在某些情况下,您可能需要进行清理(例如修剪空格,剥离而不是转义禁用的字符),然后在多个上下文中使用,但如果使用新变量执行此操作仍然是最清晰的,那么您可以跟踪哪些更改应用.这样,$_POST始终代表用户实际提交的内容,而不是您希望他们提交的内容.