【问题标题】:Text validation before storing into MySQL database存储到 MySQL 数据库之前的文本验证
【发布时间】:2014-03-01 11:39:58
【问题描述】:

大约有一天,我正在寻找解决方案,但是我没有所有必要的技能来了解我找到的解决方案是正确的还是解决方案。 所以,总而言之,在将通过 post 方法接收的文本存储到 MySQL 数据库之前,我必须做的最小验证是什么? 谢谢

【问题讨论】:

    标签: php mysql validation text


    【解决方案1】:

    PDO(或mysqli)与准备好的语句一起使用:

    $st = $db->prepare('INSERT INTO test (x) VALUES (?)');
    $st->execute(array($_POST['text']));
    

    完成。

    如果你想使用旧的 mysql 扩展,你可能想在你插入查询的所有值上使用mysql_real_escape_string

    【讨论】:

    • 函数 trim、stripslashes 和 htmlspecialchars 怎么样?我什么时候需要使用它们?为什么在这种情况下不需要?
    • stripslashes 在过去很常见,其设置名为magic_quotes。如果启用,所有 $_GET/$_POST 变量都会“神奇地”转义。现在不需要使用此功能,因为magic_quotes 现在默认关闭。
    • 其他功能应该应用于输出 somthing。您应该始终将原始数据存储到数据库中。想想如果你犯了一个错误并在你的数据库中存储了很多错误的数据,因为你已经在插入时调用了这些函数。这将是非常糟糕的。您将不得不更正整个数据库。如果你在输出时调用函数,你可以改变调用,一切都很好。
    【解决方案2】:
    $connection = mysqli_connect('localhost', 'user', 'password');
    
    //gets the post info
    $text = $_POST['key'];    
    
    //removes the white spaces before and after the string
    $text = trim($text);      
    
    // prepares the text for storing it in the database. Helps against MySQL injections.
    $text = mysqli_real_escape_string($connection, $text);   
    

    所以我认为这些是最低限度的。您还需要检查来自 POST 的信息是否有效。例如,如果您希望收到号码但收到文本,您必须处理这些问题。

    【讨论】:

    • 如果我想输入一个链接,那么呢?
    • 给出一些代码,我可以看到你在做什么。
    【解决方案3】:

    从 Web 表单获取用户输入并将其存储到任何数据库中的主要问题是 sql 注入的可能性。使用准备好的语句(如 GhostGambler 所建议的)可以帮助防止 SQL 注入。应该使用 mysqli_real_escape_string 作为最低级别的保护,但请注意它不是最好的保护。 不推荐使用 mysql 接口,因此请使用 mysqli 或 pdo。 准备好的语句和参数化查询为 SQL 注入提供了不错的保护。

    【讨论】:

      【解决方案4】:

      1) 有php提供的filter_var函数。它是最好的选择。您可以使用常量来检查值是整数、字符串还是正确的电子邮件等。

      例如:

      $email=$_POST['email'];
      $filter_email=filter_var($email,FILTER_VALIDATE_EMAIL);
      

      如果过滤器失败,它将返回 false。

      2) 那么您可以将数据插入您的数据库的最佳方法是使用准备好的语句。它几乎消除了 SQL 注入的机会。

      你可以在这里Prepared Statements阅读有关准备好的语句

      3) 你也可以使用正则表达式

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-03
        • 1970-01-01
        • 1970-01-01
        • 2015-06-16
        • 2019-04-05
        • 2010-10-17
        • 2014-07-23
        • 1970-01-01
        相关资源
        最近更新 更多