gpt4 book ai didi

php - 使用 real_escape_string 时用户访问被拒绝

转载 作者:行者123 更新时间:2023-11-29 07:04:53 26 4
gpt4 key购买 nike

我正在尝试使用 mysql_real_escape_string() 来保护登录表单。

使用这段代码:

include_once 'access-shared.php';
include_once 'access-databaseconnect.php';
session_start();
$email = mysql_real_escape_string(isset($_POST['email'])) ? mysql_real_escape_string($_POST['email']) : $_SESSION['email'];
$password = mysql_real_escape_string(isset($_POST['password'])) ? mysql_real_escape_string($_POST['password']) : $_SESSION['password'];

麻烦的是它每次都会抛出一个错误:

警告:mysql_real_escape_string() [function.mysql-real-escape-string]:用户 'xxx'@'localhost' 的访问被拒绝(使用密码:NO)

我无法理解它,db 用户拥有所有权限,并且 access-databaseconnect.php 文件中的用户名详细信息是正确的。它在 $_POST 周围没有 mysql_real_escape_string 的情况下工作得很好,但显然它让它对 mySQL 注入(inject)开放。

非常感谢任何帮助。

编辑:这是 access-databaseconnect.php 文件的内容:

<?php 
$dbhost = 'localhost';
$dbusername = 'xxxx';
$dbpassword = 'xxxx';

function dbConnect($db='') {
global $dbhost, $dbusername, $dbpassword;

$dbcnx = @mysql_connect($dbhost, $dbusername, $dbpassword)
or die('Cannot connect to Database: '.mysql_error());

if ($db!='' and !@mysql_select_db($db))
die('Cannot connect to Database: '.mysql_error());
return $dbcnx;
}
?>

最佳答案

为了使用mysql_real_escape_string(),您必须已经通过mysql_connect()建立了连接。如果 access-databaseconnect.php 中没有发生这种情况,或者连接没有成功,您将无法调用 mysql_real_escape_string()

更新

您在 access-databaseconnect.php 中定义了函数 dbConnect(),但您从未调用它。将您的连接创建为

$dbcnx = dbConnect($dbname);

附加说明,但不是问题的根源...不要围绕 isset() 调用的结果调用 mysql_real_escape_string()。虽然它很可能是无害的,但没有必要。

$email = mysql_real_escape_string(isset($_POST['email'])) ? mysql_real_escape_string($_POST['email']) : $_SESSION['email'];
// Should be
$email = isset($_POST['email']) ? mysql_real_escape_string($_POST['email']) : $_SESSION['email'];

关于php - 使用 real_escape_string 时用户访问被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7946107/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com