【发布时间】:2014-03-01 11:39:58
【问题描述】:
大约有一天,我正在寻找解决方案,但是我没有所有必要的技能来了解我找到的解决方案是正确的还是解决方案。 所以,总而言之,在将通过 post 方法接收的文本存储到 MySQL 数据库之前,我必须做的最小验证是什么? 谢谢
【问题讨论】:
标签: php mysql validation text
大约有一天,我正在寻找解决方案,但是我没有所有必要的技能来了解我找到的解决方案是正确的还是解决方案。 所以,总而言之,在将通过 post 方法接收的文本存储到 MySQL 数据库之前,我必须做的最小验证是什么? 谢谢
【问题讨论】:
标签: php mysql validation text
将PDO(或mysqli)与准备好的语句一起使用:
$st = $db->prepare('INSERT INTO test (x) VALUES (?)');
$st->execute(array($_POST['text']));
完成。
如果你想使用旧的 mysql 扩展,你可能想在你插入查询的所有值上使用mysql_real_escape_string。
【讨论】:
stripslashes 在过去很常见,其设置名为magic_quotes。如果启用,所有 $_GET/$_POST 变量都会“神奇地”转义。现在不需要使用此功能,因为magic_quotes 现在默认关闭。
$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 的信息是否有效。例如,如果您希望收到号码但收到文本,您必须处理这些问题。
【讨论】:
从 Web 表单获取用户输入并将其存储到任何数据库中的主要问题是 sql 注入的可能性。使用准备好的语句(如 GhostGambler 所建议的)可以帮助防止 SQL 注入。应该使用 mysqli_real_escape_string 作为最低级别的保护,但请注意它不是最好的保护。 不推荐使用 mysql 接口,因此请使用 mysqli 或 pdo。 准备好的语句和参数化查询为 SQL 注入提供了不错的保护。
【讨论】:
1) 有php提供的filter_var函数。它是最好的选择。您可以使用常量来检查值是整数、字符串还是正确的电子邮件等。
例如:
$email=$_POST['email'];
$filter_email=filter_var($email,FILTER_VALIDATE_EMAIL);
如果过滤器失败,它将返回 false。
2) 那么您可以将数据插入您的数据库的最佳方法是使用准备好的语句。它几乎消除了 SQL 注入的机会。
你可以在这里Prepared Statements阅读有关准备好的语句
3) 你也可以使用正则表达式
希望对你有帮助
【讨论】: