Php 将mysqli_real_escape_字符串与其他清理功能一起使用

Php 将mysqli_real_escape_字符串与其他清理功能一起使用,php,mysql,security,sql-injection,sanitization,Php,Mysql,Security,Sql Injection,Sanitization,我的表单输入清理功能: function clean_input($data) { $data = trim($data); $data = strip_tags($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data;

我的表单输入清理功能:

function clean_input($data) 
            {
              $data = trim($data);
              $data = strip_tags($data);
              $data = stripslashes($data);
              $data = htmlspecialchars($data);
              return $data;
            }   
我的SQL行:

$q  = "SELECT * FROM users WHERE username = {mysqli_real_escape_string   ('$username')} AND password = {mysqli_real_escape_string('$password')}";
                            $r = mysqli_query($dbc, $q);
这是正确的用法吗

这是正确的用法吗

不,不是。如果您在输入周围使用单引号,如果您不使用单引号,那么这将是相当安全的,但这并不是安全性或可用性/数据完整性的推荐方法

防止SQL注入 使用事先准备好的陈述。对于PHP,您可以使用or(另请注意,这可能是一个问题,具体取决于您的版本/配置)

下面是我们要说的:

第二种技术是在将用户输入放入 查询然而,这种方法[mysqli\u real\u escape\u string]与使用 参数化查询,我们不能保证它会阻止所有SQL查询 在所有情况下注射。此技术应仅在以下情况下使用: 注意,以经济高效的方式改装旧代码

clean_输入函数 让我们看看这些函数中的每一个:

  • trim:删除字符串开头和结尾的空白。这在某些情况下可能有用,但在太多情况下不会造成伤害。这实际上并不影响安全性
  • 带标签:删除。这可能是抵御某些攻击(一些代码注入、一些XSS、一些LFI/RFI)的第一道防线,但它可能会损坏您的数据(例如
    较小的符号)(
    这是正确的用法吗

    不,它不是。如果你在输入周围使用单引号,如果你不使用单引号,这将是相当安全的,但这确实不是安全性或可用性/数据完整性的推荐方法

    防止SQL注入 使用准备好的语句。对于PHP,您可以使用or(另请注意,这可能是一个问题,取决于您的版本/配置)

    下面是我们要说的:

    第二种技术是在将用户输入放入 然而,这种方法[mysqli\u real\u escape\u string]与使用 参数化查询,我们不能保证它会阻止所有SQL查询 在所有情况下都应使用注射。此技术仅适用于 注意,以经济高效的方式改装旧代码

    clean_输入函数 让我们看看这些函数中的每一个:

    • trim:删除字符串开头和结尾的空格。这在某些情况下可能有用,在太多情况下不会有任何影响。它不会真正影响安全性

    • strip_tags:删除。这是抵御某些攻击(一些代码注入、一些XSS、一些LFI/RFI)的第一道防线,但它会损坏数据(例如
      较小的符号)(感谢你的广泛回应和见解。我从你的评论中学到了很多,并有了新的学习方向。感谢你的广泛回应和见解。我从你的评论中学到了很多,并有了新的学习方向。