php mysql sql注入执行删除
如果有一个通过php脚本进行的查询易受攻击,如php mysql sql注入执行删除,php,mysql,Php,Mysql,如果有一个通过php脚本进行的查询易受攻击,如 select email from mytable where id = $_REQUEST['id'] 是否存在使用sql漏洞执行截断表等的风险 此查询使用mysql\u query()执行。不允许多个查询 我知道这是一个易受攻击的代码。我想知道的是,是否有人可以执行删除或截断。我想知道漏洞的范围,如果您允许用户自由填写“id”,请确保 例如: $\u请求['id']=123;从mytable中删除,其中1; 从mytable中选择电子邮件,其
select email from mytable where id = $_REQUEST['id']
是否存在使用sql漏洞执行截断表等的风险
此查询使用mysql\u query()执行。不允许多个查询
我知道这是一个易受攻击的代码。我想知道的是,是否有人可以执行删除或截断。我想知道漏洞的范围,如果您允许用户自由填写“id”,请确保 例如:
$\u请求['id']=123;从mytable中删除,其中1;
从mytable中选择电子邮件,其中id=123;从mytable中删除,其中1代码>
如果使用multi\u query()
,则将执行第二个查询。是的,这不是执行查询的正确方法。让我们检查一下下面的简单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;
?>
您的查询非常容易受到sql注入的攻击
使用准备好的语句和参数化查询。
使用mysqli\ux,正确的方法如下:
$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一起使用是否在前端显示查询?可能重复的是,thera是漏洞。您需要转义变量。我正在使用mysql_query()执行。不允许多个查询