作者:雪中侠客79_932 | 来源:互联网 | 2023-05-17 18:32
我正在尝试与我的phpdatabase建立安全连接
我写了以下代码:
prepare("SELECT id,username FROM user WHERE username = ? AND password = ?");
$statement->bind_param("ss", $username, $password);
$statement->execute();
$result = $statement->get_result();
$statement->close();
$count = $result->num_rows;
if ($count > 0) {
session_start();
$_SESSION["username"] = $username;
header("Location: forum.php");
} else {
$_SESSION['Error'] = "Invalid username or password";
}
}
$db->close();
}
?>
我也在php.net上阅读了有关ssl连接的一些信息,但在这种情况下我不知道如何实现。
http://php.net/manual/en/mysqli.ssl-set.php
我的代码在fedora 21上运行,并且工作正常,但是接下来我想要的是使用SSL的安全连接。
我希望有人可以有一个很好的解决方案!
1> Anri..:
连接-必需。指定要使用的MySQL连接
键-必填。指定密钥文件的路径名
cert-必填。指定证书文件的路径名
ca-必填。指定证书颁发机构文件的路径名
capath-必填。指定包含PEM格式的受信任SSL CA证书的目录的路径名
cipher-必填。指定用于SSL加密的允许密码的列表
SOURCE HERE
对于mysql_real_connect使用
ssl_set('/etc/mysql/ssl/client-key.pem', '/etc/mysql/ssl/client-cert.pem', '/etc/mysql/ssl/ca-cert.pem', NULL, NULL);
$link = mysqli_real_connect ($db, 'ip', 'user', 'pass', 'db', 3306, NULL, MYSQLI_CLIENT_SSL);
if (!$link)
{
die ('Connect error (' . mysqli_connect_errno() . '): ' . mysqli_connect_error() . "\n");
} else {
$res = $db->query('SHOW TABLES;');
print_r ($res);
$db->close();
}
?>
2> 小智..:
您不需要客户端证书和私钥,并且在大多数情况下,您不希望MySQL服务器验证客户端证书。
但是,客户端必须使用CA证书来验证服务器证书,以防止MITM。
options(MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true);
$mysqli->ssl_set(NULL, NULL, "/etc/ssl/certs/ca-bundle.crt", NULL, NULL);
$mysqli->real_connect('hostname', 'user', 'password', 'database');
$mysqli->close();
?>