Php 修剪表单输入和转义字符是否是一种良好的做法?

Php 修剪表单输入和转义字符是否是一种良好的做法?,php,security,mysqli,Php,Security,Mysqli,像这样, $type = mysqli_real_escape_string($dbc, trim($_POST['type'])); 修剪是否提高了安全性,或者mysqli\u real\u escape\u字符串是否已经足够了?mysqli\u real\u escape\u字符串将仅对字符串进行转义以防止注入攻击。如果你不想要零散的空格,你可能也应该修剪。修剪字符串的空格对提高安全性没有任何作用。 转义字符串应足以防止sql注入。使用mysqli\u real\u escape\u字符串

像这样,

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

修剪是否提高了安全性,或者mysqli\u real\u escape\u字符串是否已经足够了?

mysqli\u real\u escape\u字符串将仅对字符串进行转义以防止注入攻击。如果你不想要零散的空格,你可能也应该修剪。

修剪字符串的空格对提高安全性没有任何作用。
转义字符串应足以防止sql注入。

使用mysqli\u real\u escape\u字符串将足以防止数据库中的注入

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

  • mysqli\u real\u escape\u字符串不够。

  • 对于表单输入来说,这样做是非常糟糕的

  • 无论如何,它都不应该被使用

说到转义,mysql[i]\u real\u escape\u string不是make-my-data-magically-safe()类函数,但它只是转义字符串分隔符,以防止字符串被破坏。因此,例如,它对数字没有帮助。
事实上,它与注入攻击无关,因为该函数应在不考虑任何攻击的情况下使用,而仅用于使字符串符合SQL语法规则。 它对查询的任何其他部分都没有帮助

此外,它与“形式输入”或一般形式无关。它是与数据库相关的功能,而不是与表单相关的。字符串应该转义到查询,而不转义其他内容

无论如何,根本不应该使用它,因为您必须使用mysqli编写的语句


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

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

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

<?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的更多信息,请查看此链接


另一个有用的资源是这个PHP库,它设计用来过滤任何用户输入,以防止(几乎)XSS的所有方法

为什么他不应该使用mysqli_real_escape_string?请您解释一下您的答案,为什么对表单输入进行修剪是不好的,正如我的书中所说的那样,我要求使用它,但它说不使用?@basic,什么书?我正在读一本同样的书?感谢SPHP6和mysql 5提供动态网站。我在
POST
字符串上使用trim。为什么不呢?它有助于字符串,如电子邮件地址和名称,以及几乎任何其他字符串,在这些字符串的开头或结尾不需要任何空格。这是错误的方法。所有这些行动都是独立的,不应该在同一个地方进行。这里有一些错误信息;这里有一些误传;