Php 高效安全的查询idea-mysql
比方说,我想创建一个登录查询:Php 高效安全的查询idea-mysql,php,mysql,security,sql-injection,Php,Mysql,Security,Sql Injection,比方说,我想创建一个登录查询: $query ="SELECT * FROM userstable WHERE uName='".$userName."' AND pass='".$password."' "; $result = mysql_query($query); $num = mysql_numrows($result); if ($num == 0) { echo "wrong detiales"; } else { echo "in"; 但是通过这种方式,客户可以访问并将他的
$query ="SELECT * FROM userstable WHERE uName='".$userName."' AND pass='".$password."' ";
$result = mysql_query($query);
$num = mysql_numrows($result);
if ($num == 0) {
echo "wrong detiales";
}
else
{
echo "in";
但是通过这种方式,客户可以访问并将他的数据放入我的查询中。。。
我不喜欢它。。。为什么要让客户端访问我的数据库获取数据
问题:将数据放入数组,然后搜索数组而不是搜索查询是否健康?
它可能会慢一点(比如说我没有很多记录)。
即使它稍微慢一点,它会更安全吗
还有什么建议?代码示例
10倍,
(顺便说一句,我非常喜欢这个网站!)
将数据放在数组中,然后搜索数组而不是搜索查询,这样是否健康
不
这将破坏数据库的整体功能。其主要目的是为您提供所需的唯一数据,并在其中进行所有数据挖掘。这就是重点
所以,这是不可接受的解决方案。虽然安全,但它绝对低效且不可靠
幸运的是,已经有了一种正确的方法来运行安全的查询-准备好的语句。您可以在中阅读它们,并从
也就是说,你必须做到这一点
$query = "SELECT 1 FROM userstable WHERE uName=? AND pass=?";
$stmt = $pdo->prepare($query);
$stmt->execute(array($userName, $password));
$found = $stmt->fetchColumn();
if (!$found)
{
echo "wrong detiales";
}
else
{
echo "in";
}
我建议使用mysqli或PDO并进行查询准备……很荣幸认识到这是一个安全问题。这实际上有一个技术术语,“SQL注入”。有一个比我多一点空闲时间的人可能会写出一个好的答案,但在此期间,谷歌搜索这个词应该会让你对这个主题有足够的阅读。使用客户机提供的值运行查询与选择所有记录,然后将它们与客户机值进行比较有什么区别您是对的,您将自己完全暴露在SQL注入攻击面前。此外,任何带有单引号的输入数据,如“O'Malley”的名称,都会破坏您的SQL查询。请了解如何使用参数化查询(最好是PDO模块)来保护您的web应用程序。有例子让你开始。谢谢你的回复!由于某些原因,我必须将此代码部署到无法运行准备好的语句的服务器上。所以我必须要有创造性。总是有办法运行准备好的语句。因此,你确实必须要有创造力——让它们成为现实。