MySQL“查询”可以被利用(当处理到服务器)?

(不喜欢/关于MySQL注入)我想只是被确认有人告诉我a query可以改变(或)修改(由中间的人入侵者/黑客),而我们提交它。 可能吗?

我的意思是,让我们说有一个查询(固定查询确定)在PHP中:
$query = 'SELECT password WHERE id=1';
$result = mysql_query($query);

  • 让我们说任何SQLInject或任何威胁,最后的$query (string)将被处理。 对?

(1)这个查询可以在“提交”(到达服务器之前)的方式上进行更改/修改吗?
(2)或者returning result可以在“返回”(从服务器返回)的路上修改/修改?

所以根据他的说法,我们得到的最终$result ,与我们真正质疑的(即使真正的表格仍然安全或不被黑客攻击)是错误的。 这种情况发生在mysql_query进程中。

那么这可能吗? 对不起,如果这是愚蠢的问题,但我真的很困惑。

也许,这取决于如果您在查询中使用用户input。

例如,下面的代码可能是脆弱的。 注意,它从$_POST['UnsanitisedInput']获取用户input,并直接在查询中使用它,而不用mysql_real_escape_string()类的东西进行消毒。

 $result = mysql_query('SELECT Stuff FROM Things WHERE Widget = ' . $_POST['UnsanitisedInput']); 

对于像你发布的那样的查询,它不需要用户input,这是不可能被修改的,除非你的服务器被攻破了。

如果你想对这个话题做更多的阅读,这种攻击就是SQL注入

任何事情都是可能的,取决于你的设置。 其他人已经写了关于sql注入可能,当你不检查用户input,但如果你有一个查询没有用户input?

如果networking遭到破坏导致您认为在连接到其他人的服务器时连接到服务器,则networking上的通信可能会遭受与许多其他networking协议相同的MITM攻击。

如果您正在使用mysql.sock与本地mysql服务器交谈,那么如果服务器本身受到攻击,那么mysql.sock文件可以用与假的mysql服务器通信的套接字文件来replace(这可以改变查询并将其发送到真正的mysql服务器,或者将它发送给真正的mysql服务器,并在返回之前更改结果)。

但是,最有可能的是,如果服务器受到攻击,那么谁来做只是编辑你的php文件并改变查询,而不是做所有这些额外的工作。

他可能指的是SQL注入攻击,如果你在你的查询中直接使用unsanitized用户input,可以用来修改查询,例如

 $query = 'SELECT * FROM table WHERE id = ' . $_GET['id']; mysql_query($query); 

这里你直接使用“_ _GET ['id'],这个值不能被你保证。 相反,你应该这样做。

 $query = 'SELECT * FROM table WHERE id = ' . mysql_real_escape_string($_GET['id']); mysql_query($query); 

除此之外,攻击者通过networking改变实际查询的问题仅出现在IF,

  • WebServer(带有PHP代码)和数据库服务器是分开的,
  • 查询是通过互联网而不是通过专用networking。
  • 在这种情况下,您并未在数据库连接上使用SSL

如果上述任何一个是错误的,答案是

攻击者不能改变数据库和WebServer之间的查询或结果

因此,如果您通过公共互联网查询数据库服务器,则可以使用SSL来避免任何窃听或篡改networking数据包。

更新
通过在数据库和应用程序服务器之间的传输来处理,对吗? 或者你的意思是在服务器内存像内存篡改MySQL / PHP进程?

我已经解决了上面的networking问题。

如果在处理查询的同时更改查询,则只能通过黑客只能在服务器遭到入侵时才能安装的本机进程执行IT。
在这种情况下,攻击者不必经历所有这些麻烦,因为他可以简单地编辑你的PHP文件。

随着中间人的攻击,从服务器返回的数据很容易被篡改,所以运行SSL(尽pipeSSLStrip理论使得这不是愚蠢的certificate)。

至于编辑最终用户和PHP页面之间的查询,并不是真的,除非你在你的网站的其他地方有一个洞,允许他们编辑你的PHP。 另外我觉得PHP和MySQL之间的数据默认是未encryption的,你可以隧道(疯狂的安全数量)或者运行SSL MySQL IIRC。