【问题标题】:Sanitize: trim() + mysqli_real_escape_string() OR filter_input()?清理:trim() + mysqli_real_escape_string() 或 filter_input()?
【发布时间】:2015-12-20 21:41:09
【问题描述】:

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

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

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

由于持续不断的“不要直接访问超全局 $_post 数组”Netbeans 建议,我对此进行了搜索,发现了另一种消毒方式,我怀疑它是否与我迄今为止所做的相同:

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

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

【问题讨论】:

  • 最佳,根据哪个标准?
  • 主要清理目标:创建一个没有注入的安全后端
  • @HannesJohansson 我发现了这个,我猜这是最好的问题之一:stackoverflow.com/questions/15102796/when-to-use-filter-input
  • 当您将数据从视图传递到控制器时,您只需使用 $_POST 一次,然后从那里 - 在控制器中 - 使用方法的参数(即别名 $_POST 数组)。消除 $_POST 的过度使用。此外,Netbeans 将再次高兴。
  • 您正在使用 MySQLi - 为什么不使用准备好的语句?您甚至可以粘贴来自$_POST 的东西,而无需担心任何事情。另外,为什么要在插入前修剪?我通常会保持原始字符串完好无损,并在从数据库中获取它后对其进行操作——这样我就可以在任何时候用它做任何我想做的事情。

标签: php sanitization


【解决方案1】:

他们做不同的事情。

总是为您的数据库转义数据。最好使用准备好的语句来完成。

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

始终(除非您绝对相信您的用户没有恶意并且能够编写高质量的 HTML)在将输入的 HTML 插入 HTML 文档之前,对输入的 HTML 使用 DOM 感知白名单 XSS 过滤器。

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

【讨论】:

    【解决方案2】:

    不要过滤/清理,而是使用 mysqli 的预先准备好的语句。无论参数的内容如何,​​它们都可以安全地执行,并且不需要繁琐且容易出错的转义/取消转义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-09
      • 1970-01-01
      • 2015-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多