2

時々、ウェブサーバーのログでこれを取得します:

[2012 年 12 月 9 日 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 ユーザー名を使用してログインしようとしているようです。害がなくても、これを防ぐ方法はありますか? 彼はどのようにしてそのコード行を介して接続することができたのでしょうか?

ありがとう

4

5 に答える 5

2

このmysql_query()関数は、接続がまだ確立されていない場合、デフォルトのユーザー名とパスワード (php.ini で設定) を使用して mysql サーバーへの接続を試みます。これは、クエリを実行することが想定されmysql_connect()ており、まだ呼び出されていない場合は実行できないためです。

ここで唯一間違っているのは、PHP コードです。ところで、複数のレベルで..最近はmysqliまたはPDOを使用する必要があります。

于 2012-12-18T14:57:41.773 に答える
1

これが私が起こっていると思うことです。

index.php2番目のページ(例:)を含む1つのページ(例:)があります/bar.foo.php。でindex.php、プライマリ接続を確立します。

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

2ページ目では、いくつかの機能を実行します。

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

ただし、2番目のファイルに直接アクセスするとデータベース接続がないため、デフォルトのクレデンシャルで接続を試みて失敗し、エラーがスローされます。

これを防ぎたい場合は、サイトを保護する必要があります。/bar私の推測では、あなたのフォルダに人が入ることは決して許されるべきではありません。.htaccessこのフォルダにファイルを追加することで、他の人がこのフォルダに入らないようにすることができます。

.htaccessファイルを使用すると、ユーザーがサイト上のファイルを操作する方法を制御できます。新しいテキストファイルを作成し、名前を付けて保存するだけ.htaccessです(このファイルの前には何もありません.)。

このファイルを/barフォルダー内に配置し、次のテキストをファイル内に配置します。

deny from all

これで、誰かがこのフォルダに直接アクセスしようとすると、代わりに403エラーメッセージが表示されます。PHPファイルは、他のページに引き続き含めることができます。

あなたはここでもっと学ぶことができ.htaccessます:

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

于 2012-12-18T16:41:58.210 に答える
1

このエラーは、このファイルが正しい権限なしでデータベースにアクセスしようとしていることを意味します。この場合、パスワードなしですべてのデフォルト値を使用します)。

データベースのクレデンシャルは別のファイルに保存されていると思います。このファイルは次のように参照できます。

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

$_SERVER配列は、Webサイトにアクセスするユーザーによって部分的に入力されていることを知っています。これは、これらの変数の一部が空であるか、改ざんされている可能性があることを意味します。たとえば、ページがを介してアクティブ化されるCRON Jobと、この特定の変数は空になります。

IIRCでは、ドメイン名の代わりに(つまり、のhttp://192.168.0.1/bar/foo.php代わりにhttp://example.com/bar/foo.php)WebサイトのIPアドレスにアクセスして、この配列を操作することもできます。

__FILE__代わりに変数を使用してこれを回避できます$_SERVER['DOCUMENT_ROOT'];

于 2012-12-18T15:10:16.673 に答える
0

mysql_query は接続されていない場合、php.ini のデフォルトにフォールバックして接続します (これらを確認するには、phpinfo(); を実行します)。

デフォルトではルートへの接続に失敗し、そのエラーが発生します。

Gung Foo に同意し、mysqli または PDO を使用する

于 2012-12-18T15:01:17.450 に答える
0

using password: NO パスワードがないことを意味します。管理者に移動してパスワードを設定してみてください: YES。またはパスワードをroot

他の人が言ったように、PDOまたはmysqliを使用してください

于 2012-12-18T15:02:45.643 に答える