爲什麼MySQL更容易受到SQL注入攻擊?爲什麼MySQL更容易受到SQL注入攻擊
我一直在尋找這個問題的最後兩天的完美答案,但徒勞無功。如果您可以根據SQL注入漏洞和安全性將MySQL與其他數據庫進行比較,那將會更好。 PS:我非常瞭解MySQL和SQL注入攻擊。請嘗試瞭解問題的全部內容。
爲什麼MySQL更容易受到SQL注入攻擊?爲什麼MySQL更容易受到SQL注入攻擊
我一直在尋找這個問題的最後兩天的完美答案,但徒勞無功。如果您可以根據SQL注入漏洞和安全性將MySQL與其他數據庫進行比較,那將會更好。 PS:我非常瞭解MySQL和SQL注入攻擊。請嘗試瞭解問題的全部內容。
爲什麼MySQL的SQL注入攻擊
更容易MySQL是不是。從來沒有過。
MySQL不會比其他任何DBMS更易受影響。 這不是魔杖,它是精靈,你知道的。它不是mysql,但它的用戶更容易受到SQL注入攻擊。
就是這樣。
而用戶的問題仍然存在,正如其他答案生動地表明的那樣。遵循其建議(php/mysql人員中非常常見,介意你),很快你就會享受到一流的SQL注入。
好的。它可能不在當前場景中。但爲什麼在更早的時候呢? –
@Rohit:如上所述,它從來沒有。事實上,由於不支持大多數界面中的多個語句,因此它比許多弱點更容易受到攻擊,這限制了輕鬆攻擊的範圍。 MySQL在沒有經驗的PHP編程人員中很受歡迎;這是關於它的一切。 – bobince
什麼是SQL注入
SQL注入是指有人將一個MySQL聲明不知情的情況下你的數據庫上運行的行爲。注入通常發生在你向用戶詢問輸入時,如他們的名字,而不是他們給你一個名字,而不是你在數據庫上不知不覺中運行的MySQL語句。
SQL注入實例
雖然上面的例子中顯示的情況下,攻擊者可能可以獲得訪問了很多,他們不應該有信息,該攻擊可以差很多。例如,攻擊者可以通過執行DELETE語句清空表。
MySQL和代碼
$name_evil = "'; DELETE FROM customers WHERE 1 or username = '";
// our MySQL query builder really should check for injection
$query_evil = "SELECT * FROM customers WHERE username = '$name_evil'";
// the new evil injection query would include a DELETE statement
echo "Injection: " . $query_evil;
顯示
SELECT * FROM customers WHERE username = ' '; DELETE FROM customers WHERE 1 or username = ' '
如果你在運行此查詢,那麼注入的DELETE語句會完全排空你的 「客戶」 表。現在你知道這是一個問題,你怎麼能阻止它?
注射預防 - mysql_real_escape_string()
幸運的是,這個問題已經知道了一段時間,PHP有一個特製的功能,以防止這些攻擊。所有你需要做的就是使用函數mysql_real_escape_string的滿口。
mysql_real_escape_string的作用是取一個將在MySQL查詢中使用的字符串,並返回相同的字符串,並且所有SQL注入嘗試都安全地轉義。基本上,它將取代那些用戶可能使用MySQL安全替代品(逃脫報價)輸入的麻煩引號(')。
讓我們在我們之前的兩次注入攻擊中試用這個函數,看看它是如何工作的。
的MySQL & PHP代碼
//NOTE: you must be connected to the database to use this function!
// connect to MySQL
$name_bad = "' OR 1'";
$name_bad = mysql_real_escape_string($name_bad);
$query_bad = "SELECT * FROM customers WHERE username = '$name_bad'";
echo "Escaped Bad Injection: <br />" . $query_bad . "<br />";
$name_evil = "'; DELETE FROM customers WHERE 1 or username = '";
$name_evil = mysql_real_escape_string($name_evil);
$query_evil = "SELECT * FROM customers WHERE username = '$name_evil'";
echo "Escaped Evil Injection: <br />" . $query_evil;
顯示
Escaped Bad Injection:
SELECT * FROM customers WHERE username = '\' OR 1\''
Escaped Evil Injection:
SELECT * FROM customers WHERE username = '\'; DELETE FROM customers WHERE 1 or username = \''
注意,那些邪惡的報價已經越獄以反斜線\,防止注入攻擊。現在所有這些查詢都會嘗試找到一個完全荒謬的用戶名: •錯誤:\'OR 1 \' •Evil:\';刪除客戶WHERE 1或用戶名= \'
我認爲我們不必擔心那些愚蠢的用戶名訪問我們的MySQL數據庫。所以請使用方便的mysql_real_escape_string()函數來幫助防止您網站上的SQL注入攻擊。閱讀本課後,你沒有理由不使用它!
我很清楚SQL注入攻擊和MySQL。你能回答這個問題嗎? –
閱讀我的答案,它有如何防止它在MySQL中。 –
我不是在談論緩解。我的問題很簡單:「爲什麼可以對MySQL執行SQL注入攻擊?」 –
任何人都可以提供答案,而不是投票下來? –
看看這個http://www.rackspace.com/knowledge_center/article/sql-injection-in-mysql –
另請參閱:[MySQL是否比Perl DBI下的PostgreSQL更能抵抗SQL注入攻擊?](http:// stackoverflow.com/questions/2221787/is-mysql-more-resistant-to-sql-injection-attack-than-postgresql-under-perl-dbi) – Paul