为什么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