清理:trim() + mysqli_real_escape_string() 或 filter_input()?

Sanitize: trim() + mysqli_real_escape_string() OR filter_input()?

我正在寻找最安全的方法来清理用户输入并避免 PHP 在线应用程序的安全风险。

直到现在,我使用 TRIM + mysqli_real_escape_string 来清理空格和清理内容,如下所示(字符串数据):

$ca_title = trim(mysqli_real_escape_string($con,$_POST['ca_name']));

由于 "do not access superglobal $_post array directly" Netbeans 的持续建议,我对此进行了搜索并找到了另一种清理方法,我怀疑它是否与我之前所做的相同:

$ca_title = filter_input(INPUT_POST, 'ca_name', FILTER_SANITIZE_STRING);

查看 PHP 文档后,我必须说我发现两者之间没有太大区别,因此我不能拒绝最安全的方法。你能给我一些建议吗?

而不是filtering/sanitizing,使用mysqli 的preprared 语句。无论参数内容如何,​​都可以安全执行,不需要繁琐且容易出错 escaping/un-escaping.

他们做不同的事情。

始终 为您的数据库转义数据。这最好用准备好的语句来完成。

始终 在将文本插入 HTML 之前转义文本(htmlspecialchars 是这里的基本工具)。

总是(除非你绝对相信你的用户既不是恶意的又能写质量 HTML)在插入之前对输入的 HTML 使用 DOM 感知白名单 XSS 过滤器将其放入您的 HTML 文档中。

当数据中包含某些字符(例如电话号码中的非数字)毫无意义时,使用过滤器(除上述过滤器外)。不过,请先确保您的 preconceptions 是正确的。