如果通過PHP腳本的查詢是脆弱的就像PHP的MySQL的SQL注入執行刪除
select email from mytable where id = $_REQUEST['id']
是否有風險,有人可以使用SQL漏洞執行截斷表等。
該查詢是使用mysql_query()執行的。多個查詢是不允許的。
我知道這是一個易受攻擊的代碼。我想知道的是,如果有人可以執行刪除或截斷。我想知道漏洞的程度
如果通過PHP腳本的查詢是脆弱的就像PHP的MySQL的SQL注入執行刪除
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;
,如果你使用multi_query()
然後第二個查詢將被執行。
我正在使用mysql_query()執行。多個查詢是不允許的 – Ram 2014-11-04 12:59:35
是的,這不是執行查詢的正確方法。讓我們檢查這個下面這個簡單的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
你在顯示前端查詢? – Gautam3164 2014-11-04 11:33:24
可能的重複[如何防止SQL注入在PHP?](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) – 2014-11-04 11:35:53
是的,thera是vulnerabities。你需要逃避你的變量。 – vaso123 2014-11-04 11:35:54