2014-11-04 13 views
-1

如果通過PHP腳本的查詢是脆弱的就像PHP的MySQL的SQL注入執行刪除

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

是否有風險,有人可以使用SQL漏洞執行截斷表等。

該查詢是使用mysql_query()執行的。多個查詢是不允許的。

我知道這是一個易受攻擊的代碼。我想知道的是,如果有人可以執行刪除或截斷。我想知道漏洞的程度

+0

你在顯示前端查詢? – Gautam3164 2014-11-04 11:33:24

+0

可能的重複[如何防止SQL注入在PHP?](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) – 2014-11-04 11:35:53

+0

是的,thera是vulnerabities。你需要逃避你的變量。 – vaso123 2014-11-04 11:35:54

回答

1

當然,如果你讓用戶自由地填寫「id」。

例如:

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

,如果你使用multi_query()然後第二個查詢將被執行。

+0

我正在使用mysql_query()執行。多個查詢是不允許的 – Ram 2014-11-04 12:59:35

0

是的,這不是執行查詢的正確方法。讓我們檢查這個下面這個簡單的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()

0

您的查詢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