-3

重複の可能性:
私のサイトから MYSQL ERROR を取得する

私は bux サイト CrimsonBux.Com をホストしています。スクリプトではすべてがうまく機能しています。パスワード回復ページhttp://crimsonbux.com/login.php?option=forgotで 1 つだけ問題があります。ページに電子メール アドレスと CAPTCHA を入力すると、ユーザーはこのページhttp://crimsonbux.com/recover.phpにリダイレクトされます。recover.php ページで、ユーザーがエラーに直面しています。エラーを以下に示します。

Warning: mysql_query() [function.mysql-query]: Access denied for user 'crimst1d'@'localhost' (using password: NO) in /home/crimst1d/public_html/recover.php on line 19

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /home/crimst1d/public_html/recover.php on line 19

ここで私のサイトは MySQL データベースに接続できません。接続方法は?

これが私のrecover.phpページの構成です。

<?
/**********************************************************************************************************************************************
    ScriptBux Version 2.50 beta
    This Script has been created and coded by Gabrola and edited by hassan ahmady.
    If you find any bugs in the script report at support@thealternatif.info or contact hassan ahmady.
    Copywrite ScriptBux 2008;
    Please make donations if you use this sript for commercial use
    to My paypal account "bisnis-usd@plasa.com"
************************************************************************************************************************************************/

?>

<h3>Forgot Password</h3>
<?php
if($_POST)
{
  $code = $_POST["code"];
  $email = $_POST["email"];
  $emailx = mysql_query("SELECT COUNT(*) AS cnt FROM tb_users WHERE email='{$_POST['email']}'");
  $emailx = mysql_fetch_array($emailx);
  $emailx = $emailx["cnt"];
  $errormsg = false;
  if($_SESSION['string'] != $code)
  {
    $error = 1;
    $errormsg .= "<b>Error -</b> The captcha was entered incorrectly.<br />";
  }
  if(!$code)
  {
    $error = 1;
    $errormsg .= "<b>Error -</b> The captcha was entered incorrectly.<br />";
  }
  if(!$email)
  {
    $error = 1;
    $errormsg .= "<b>Error -</b> The email was not supplied.<br />";
  }
  if(!$emailx)
  {
    $error = 1;
    $errormsg .= "<b>Error -</b> No account was found with that email address.<br />";
  }
  if($_SESSION['next_reseptsend'] != 0)
  {
    $error = 1;
    $errormsg .= "<b>Error -</b> You have already made a password retrieval within the last 15 minutes.<br />";
  }
  $_SESSION['string'] = false;
  if($error)
  {
    print $errormsg."<br><br>";
  } else {
    $s = mysql_query("SELECT * FROM tb_users WHERE email='{$_POST['email']}'");
    $x = mysql_fetch_array($s);
    $_SESSION['next_reseptsend'] = 1;
    $message = "Hello {$x['username']},
    You requested to resend your account password a while ago.

    Account Username: {$x['username']}
    Account Password: {$x['password']}

    We hope you can have a good time earning your money again,

    Thanks,
    {$config['site_name']}";
    mail($x["email"],"Password Retrieval - ".$config["site_name"],$message,"From: mail@".$_SERVER['HTTP_HOST']);
    print "<b>Password Sent!</b><br />
    We have dispatched your password to your email address.<br />
    You can only make another account retrieval again in 15 minutes.<br />";
  }
}
?>

<div style="padding-left:25px;">
<form action="recover.php" method="post" name="resend">
<table>
<tr><td class="midtext">Your Email:</td><td><input type="text" name="email" size="25" class="form" autocomplete="off" value="<?=$_POST['email']?>"></td></tr>
<tr><td class="midtext" valign="top">Security Code:</td><td class="midtext"><img src="image.php" onclick="this.src='image.php?newtime=' + (new Date()).getTime();"><br /><span style="font-size:10px;">(Click to reload)</span><br /><input type="text" name="code" size="17" maxlength="" autocomplete="off" class="form"></td></tr>
<tr><td></td><td align="right"><input type="submit" value="Login" name="loginsubmit"  class="inputbox"></td></tr>
</table>
</form>
</div>

<?php

?>
4

2 に答える 2

1

mysql_connectデータベースにユーザーを追加する必要があります。また、スクリプトがおよびを介して接続できるデータベースも追加する必要がありますmysql_select_db

スクリプトの先頭に配置します。

mysql_connect('localhost', 'username', 'password');
mysql_select_db('database name');
于 2012-05-26T11:44:17.203 に答える
0

セキュリティの脆弱性を解決する方法は次のとおりです。これを変える:

$emailx = mysql_query("SELECT COUNT(*) AS cnt FROM tb_users WHERE email='{$_POST['email']}'");

これに:

$emailUntainted = mysql_real_escape_string($_POST['email']);
$emailx = mysql_query("
    SELECT COUNT(*) AS cnt
    FROM tb_users
    WHERE email='{$emailUntainted}'
");

これらのうち2つを修正する必要があります。なぜこれが必要なのかを理解するために、いくつかの読書も行ってください:)

ポストスクリプト:@Esailijaが言うように、PDOとプリペアドステートメントを使用する方が良いですが、それはあなたの側でより多くの学習を必要とします。この修正をすぐに入手し、可能な場合はPDOに切り替えてください。

于 2012-05-26T11:57:48.340 に答える