修剪表单输入以及转义字符是一种好习惯吗?

时间:2011-04-14 09:53:35

标签: php security mysqli

像这样,

$type = mysqli_real_escape_string($dbc, trim($_POST['type']));

修剪是否提高了安全性,或者mysqli_real_escape_string是否已经足够了?

5 个答案:

答案 0 :(得分:2)

mysqli_real_escape_string只会转义字符串以防止注入攻击。如果你不想要杂散的空白,你也应该修剪它。

答案 1 :(得分:2)

  • mysqli_real_escape_string 是不够的。

  • 为表单输入

  • 执行此操作极为糟糕
  • 无论如何都不应该使用它

说到转义,mysql [i] _real_escape_string 不是 make-my-data-magicically-safe()类型的函数,但它只是转义 string 分隔符,到防止字符串被破坏。因此,例如,它对数字没有帮助 实际上,它与注入攻击无关,因为无论遇到什么攻击都应该使用此函数,但只能使您的字符串与SQL语法规则兼容。 它对查询的任何其他部分都没有帮助。

此外,它与“表单输入”无关,也与表格无关。它是与数据库相关的功能,而不是与表格相关的功能。 字符串 转到查询应该被转义,而不是其他任何内容。

无论如何它根本不应该被使用,因为你必须使用mysqli预备语句。

哦,是的 - trim()与安全性无关,而是使数据看起来整洁。

答案 2 :(得分:1)

使用mysqli_real_escape_string可以防止数据库中的注入。

向用户显示发布的值时,您应确保在其上使用htmlentities

答案 3 :(得分:0)

修剪字符串的空白将无助于提高安全性。 转义字符串应该足以阻止sql注入。

答案 4 :(得分:0)

您的示例将有助于防止SQL注入,因为任何“特殊字符”都将被转义(因此“成为”等等),但不会阻止XSS(跨站点脚本),因为它仍然可能包含HTML字符如<和>

您可以使用以下代码来帮助防止这两种类型的攻击

<?php
    //Get the variable
    $userValue = $_GET['value'];
    //Remove any preceding/leading whitespace
    $userValue = trim($userValue);
    //Convert any HTML characters to their entity value
    $userValue = htmlspecialchars($userValue);
    //Escape any SQL special characters
    $userValue = mysqli_real_escape_string($dbc, $userValue);
?>

有关XSS的更多信息,请查看此链接https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)

另一个有用的资源是这个PHP库,它旨在过滤任何用户输入以防止(几乎)所有XSS方法http://htmlpurifier.org/