【问题标题】:Sanitize data PHP function [duplicate]清理数据PHP函数[重复]
【发布时间】:2013-12-08 10:01:16
【问题描述】:

无法使用 PDO。

我在这里阅读了很多问题,这是我第一次尝试为我办公室以外的人做一些事情,所以我需要对数据输入进行清理,研究它发现了这个功能。

function clean_data($input){
$input = trim(htmlentities(strip_tags($input,",")));
if (get_magic_quotes_gpc())
$input = stripslashes($input);
$input = mysql_real_escape_string($input);
return $input;
}

示例:

$vartodb = clean_data($_POST['yourformfieldhere']);

这个功能可以清理数据吗?

【问题讨论】:

  • 这种方法很可怕,会破坏和破坏数据。只需使用适当的清理方法在使用数据之前对其进行清理。例如。 mysql_real_escape_string() 在运行 mysql_query() 之前。或htmlentities() 在网页上输出任何内容之前。但是 PDO 或 mysqli 确实会有益
  • 所以使用这段代码可以避免 sql 注入,$sql = "INSERT INTO clientes VALUES (NULL,:iduser,:nombre,:cedula,:dir,:tel)"; $query = $db->prepare($sql); $query->execute(array( ':iduser'=>($_POST['id']), ':nombre'=>($_POST['nombre']), ':cedula'=>($_POST['cedula']), ':dir'=>($_POST['dir']), ':tel'=>($_POST['tel']), ))

标签: php mysql sanitization


【解决方案1】:

不是真的。

如果要将变量放入数据库中,最好使用带有绑定变量的预处理语句。如果您不能使用 PDO,您也可以使用 mysqli。如果您真的被mysql_* 函数所困扰,您只需要mysql_real_escape_string

如果输出到浏览器,只需要htmlspecialchars

简而言之,没有通用的清理功能,您需要为要输出到的介质准备/转义/编码数据。

【讨论】:

    【解决方案2】:

    这是一个很大的话题——这个功能还可以,但还有更好的方法。

    检查mysqli_real_escape_string:http://php.net/manual/en/mysqli.real-escape-string.php

    不要忘记准备好的语句:http://php.net/manual/en/pdo.prepared-statements.php

    另外,如果您的输入是整数类型怎么办?您应该进行类型转换。

    另外,如果有人在您的网络表单中添加了额外的字段怎么办?

    虽然这个功能确实做了一些消毒,但它只是冰山一角,就像我说的那样,这是一个很大的话题。

    在我看来,这是提供很少保护的草率代码。

    【讨论】:

      猜你喜欢
      • 2012-10-08
      • 2011-08-17
      • 2017-02-04
      • 1970-01-01
      • 2018-10-18
      • 2013-08-08
      • 1970-01-01
      • 1970-01-01
      • 2019-08-25
      相关资源
      最近更新 更多