【问题标题】:Is this MySQLi safe? [closed]这个 MySQLi 安全吗? [关闭]
【发布时间】:2014-01-13 10:26:02
【问题描述】:

我想用 MySQLi 语句或 PDO 执行以下操作,但我在服务器上遇到了很多错误。

请检查以下示例来学习我自己编写的代码是否可以确保安全以及是否可以使用它。希望下面的代码能帮助 MySQLi 新用户至少学习如何开始使用 MySQLi:

<?php
$host = "localhost";
$username = "db_user";
$password = "db_pass";
$dbname = "db_name";
@ $db = mysqli_connect($host, $username, $password, $dbname);
if(mysqli_connect_errno())
{
    die("Connection could not be established");
}
$username = mysqli_real_escape_string($db, $_GET['user']);
$query = ("SELECT * FROM members WHERE profile='$username' ORDER BY id DESC LIMIT 1");
$result = mysqli_query($db, $query);
while($row = mysqli_fetch_array($result))
{
?>

PROFILE VIEW

   <br>Name: <?php echo $row['nombre']?> ID: <?php echo $row['Age']?> <br />




<?php
}
?>

一切正常。如果有人能让它更安全,我将不胜感激。

【问题讨论】:

  • 最安全的假设是用户数据总是恶意的。第二个最安全的假设是始终使用带有参数化输入的准备好的语句。
  • 请不要大写。您将变量重新用于两种不同的事物,我认为这并不安全。我还会更多地清理用户输入。 $查询 = ("");是有效的,但这不是您定义字符串的方式。您可以删除它周围的 ( 和 )。
  • 这个问题似乎是题外话,因为它要求a codereview

标签: php pdo mysqli statements procedural


【解决方案1】:

我会选择这个。

<?php
$host = "localhost";
$username = "db_user";
$password = "db_pass";
$dbname = "db_name";
$db = mysqli_connect($host, $username, $password, $dbname);
if(mysqli_connect_errno()) {
 die("Connection could not be established");
}
$username = $_GET['user'];
$query = $db->prepare("SELECT * FROM `members` WHERE `profile` = ? ORDER BY `id` DESC LIMIT 1");
$query->bind_param('s', $username);
$query->execute();
while($row = $query->fetch_row()) { ?>

 <br />Name: <?php echo $row['nombre']; ?> ID: <?php echo $row['Age']; ?> <br /><?php
} ?>

【讨论】:

  • 致命错误:调用未定义的方法 mysqli_stmt::fetch_row()
  • 你能在-&gt;execute() 之后对$query 执行var_dump() 吗?
猜你喜欢
  • 2020-08-23
  • 1970-01-01
  • 1970-01-01
  • 2018-04-03
  • 1970-01-01
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多