代码之家  ›  专栏  ›  技术社区  ›  Ibrahim Azhar Armar

帮助我阻止用户输入有害代码

  •  2
  • Ibrahim Azhar Armar  · 技术社区  · 15 年前

    $name = htmlspecialchars(strip_tags(mysql_real_escape_string($_POST['com_name'])));
    

    4 回复  |  直到 15 年前
        1
  •  1
  •   Sander Rijken    15 年前

    这样做的目的不是阻止用户输入它,而是确保您在数据库查询中安全地输入它们。这意味着使用 mysql_real_escape_string 或者使用参数化查询 mysqli :

    /* Prepare an insert statement */
    $query = "INSERT INTO myCity (Name, CountryCode, District) VALUES (?,?,?)";
    $stmt = mysqli_prepare($link, $query);
    
    mysqli_stmt_bind_param($stmt, "sss", $val1, $val2, $val3);
    

        2
  •  2
  •   Russell Dias    15 年前

    如果将用户输入插入数据库,则 mysql_real_escape_string 就够了。更好的是,使用准备好的语句——PDO或MySQLi。

    如果您只是在页面上显示用户数据,那么应该使用 htmlspecialchars() htmlentities()

    至于你贴的代码。让我们把它分解一下。

    • htmlspecialchars -转换html 将字符转换为相应的实体。
    • strip_tags -删除HTML和PHP
    • mysql\u real\u escape\u字符串 -逃逸 数据库输入前的字符。

    因此,正如您所看到的,您使用的前两个函数似乎适得其反。您正在将HTML字符合并到实体中,但也在剥离标记。

    确保在进入数据库之前保护用户输入 mysql\u real\u escape\u字符串

        3
  •  2
  •   user420442 user420442    15 年前

    你的电话有可能 mysql_real_escape_string 如果找不到或无法创建到数据库的连接,则将失败。

    我倾向于在实际执行查询之前尽可能深入地进行此类调用。这可能会降低我的性能,但我不必担心会丢失更高级别的参数(关于sql注入),而且我知道在这一点上我总是有一个到数据库的有效连接。

    我对所有用户输入所做的第一件事就是运行它 filter_var

        4
  •  2
  •   Community CDub    8 年前

    这里是 a complete answer about SQL injections I posted before
    简而言之,mysql\u real\u escape\u字符串本身并不能保护任何东西。它只在你把你的数据用引号括起来的时候起作用。

    使用这两种方法是多余的。只要一个就够了。我更喜欢htmlspecialchars。