繁体   English   中英

SQL查询不进行注入,但是

[英]SQL query not subjected to injection, but

有时我会在我的网络服务器日志中得到这个:

[09-Dec-2012 15:35:45欧洲/柏林] PHP警告:mysql_query()[function.mysql-query]:在/ bar /中拒绝用户'root'@'localhost'(使用密码:NO)的访问第4行的foo.php

第4行是:

$sql=mysql_query("select * from mytablefoo ORDER BY id DESC LIMIT 9");

似乎有人试图使用默认的root用户名登录。 有什么办法可以防止这种情况发生,即使它没有危害? 他如何通过该代码行进行连接?

谢谢

如果尚未建立连接,则mysql_query()函数尝试使用默认的用户名和密码(在php.ini中配置)连接到mysql服务器。 那是因为它应该运行一个查询,并且如果尚未调用mysql_connect() ,则不能。

唯一错误的是PHP代码。 在多个层面上。近来,人们应该使用mysqliPDO

此错误表示在这种情况下,此文件将使用所有默认值而不使用任何密码来尝试以没有正确特权的方式访问数据库。

我猜您的数据库凭据存储在另一个文件中。 您可以这样引用该文件:

include( $_SERVER['DOCUMENT_ROOT'] . '/filepath/db.php');

我知道一个事实, $_SERVER数组由访问您的网站的用户部分填充。 这意味着其中一些变量可以为空或被篡改。 例如,当通过CRON Job激活页面时,该特定变量将为空。

IIRC,也可以通过访问网站的IP地址而不是域名(即: http://192.168.0.1/bar/foo.php : http://192.168.0.1/bar/foo.php而不是http://example.com/bar/foo.php来操纵此数组http://example.com/bar/foo.php )。

您可以使用__FILE__变量而不是$_SERVER['DOCUMENT_ROOT'];

我认为这是正在发生的事情。

您有一个页面(例如: index.php )和第二个页面(例如: /bar.foo.php )。 index.php ,进行主要连接:

<?php
//  index.php
//  ...
$db = mysql_connect($db, $username, $password);
//  ...

在第二页上,您可以执行一些功能:

<?php
//  /bar/foo.php
//  ...
mysql_query("select * from mytablefoo ORDER BY id DESC LIMIT 9"); // TODO: use mysqli or PDO here
//  ...

但是,如果直接访问第二个文件,则没有数据库连接,因此它将尝试使用默认凭据进行连接,失败并引发错误。

如果要防止这种情况,则需要保护您的网站。 我的猜测是,绝对不应在您的/bar文件夹中允许其他人。 您可以通过将.htaccess文件添加到此文件夹来阻止人们进入此文件夹。

.htaccess文件使您可以控制用户如何与您站点上的文件进行交互。 只需创建一个新的文本文件,并将其另存为.htaccess (此文件在.之前没有任何内容)。

将此文件放在/bar文件夹中,并将以下文本放入文件中:

deny from all

现在,如果有人尝试直接访问此文件夹,则会显示403错误消息。 PHP文件仍然可以包含在其他页面中。

您可以在此处了解有关.htaccess更多信息:

http://perishablepress.com/stupid-htaccess-tricks/

mysql_query是否没有连接回退到php.ini中的默认连接(执行phpinfo();查看这些信息)

默认设置无法连接到root并给出该错误。

同意与Gung Foo使用mysqli或PDO

using password: NO表示您没有密码。 尝试进入管理员并设置密码,密码为: YES 或为root分配密码

如其他所说使用PDO或mysqli

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM