php-mysql-sql注入执行删除


php mysql sql injection execute delete

如果通过像一样易受攻击的php脚本进行查询

select email from mytable where id = $_REQUEST['id']

是否存在使用sql漏洞执行截断表等的风险。

此查询使用mysql_query()执行。不允许进行多重查询。

我知道这是一个易受攻击的代码。我想知道的是,是否有人可以执行删除或截断操作。我想知道漏洞的范围

确定是否允许用户自由填写"id"。

例如:

$_REQUEST['id'] = 123; delete from mytable where 1; select email from mytable where id = 123; delete from mytable where 1;

如果使用CCD_ 2,则将执行第二个查询。

是的,这不是执行查询的正确方式。让我们检查下面的简单SQL注入示例
<?php
// We didn't check $_POST['password'], it could be anything the user wanted! For example:
$_POST['username'] = 'aidan';
$_POST['password'] = "' OR ''='";
// Query database to check if there are any matching users
$query = "SELECT * FROM users WHERE user='{$_POST['username']}' AND   password='{$_POST['password']}'";
mysql_query($query);
// This means the query sent to MySQL would be:
echo $query;
?>

发送到MySQL 的查询

SELECT * FROM users WHERE user='aidan' AND password='' OR ''=''

始终使用mysql_real_escape_string()

您的查询很容易受到sql注入的攻击。

使用准备好的语句和参数化查询

使用mysqli_,正确的方法如下:

$stmt = $connection->prepare('SELECT email FROM mytable WHERE id = ?');
$stmt->bind_param('s', $_REQUEST['id']);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
    // do whatever you need with $row
}

您还可以将准备好的语句与PDO 一起使用