如果通过像一样易受攻击的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,则将执行第二个查询。
<?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 一起使用