(不喜欢/关于MySQL注入)我想只是被确认有人告诉我a query可以改变(或)修改(由中间的人入侵者/黑客),而我们提交它。 可能吗?
我的意思是,让我们说有一个查询(固定查询确定)在PHP中:
$query = 'SELECT password WHERE id=1';
$result = mysql_query($query);
$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之间的查询或结果
因此,如果您通过公共互联网查询数据库服务器,则可以使用SSL来避免任何窃听或篡改networking数据包。
更新
通过在数据库和应用程序服务器之间的传输来处理,对吗? 或者你的意思是在服务器内存像内存篡改MySQL / PHP进程?
我已经解决了上面的networking问题。
如果在处理查询的同时更改查询,则只能通过黑客只能在服务器遭到入侵时才能安装的本机进程执行IT。
在这种情况下,攻击者不必经历所有这些麻烦,因为他可以简单地编辑你的PHP文件。
随着中间人的攻击,从服务器返回的数据很容易被篡改,所以运行SSL(尽pipeSSLStrip理论使得这不是愚蠢的certificate)。
至于编辑最终用户和PHP页面之间的查询,并不是真的,除非你在你的网站的其他地方有一个洞,允许他们编辑你的PHP。 另外我觉得PHP和MySQL之间的数据默认是未encryption的,你可以隧道(疯狂的安全数量)或者运行SSL MySQL IIRC。