php - PHP 安全数据库连接
问题描述
我的托管网络服务器根目录是 /public_html,我创建了一个与 public_html ( /private ) 相同级别的文件夹,并创建了一个包含我在本教程中看到的数据库登录信息的 .ini 文件
https://teamtreehouse.com/community/how-do-you-store-your-mysql-user-credentials-in-a-secure-way
所以我的文件夹结构看起来像这样
/
|
-private
| |
| -db.ini
-public_html
|
-website files
-mailer.php
我正在使用 grecaptcha。我想验证是否没有机器人在使用我的表单,向我的电子邮件发送电子邮件通知,最后将客户信息保存到一个小型数据库中。我的 grecaptcha 工作正常,正在发送电子邮件我在将信息获取到我的数据库时遇到问题。
<?php
// Checks if form has been submitted
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
function post_captcha($user_response) {
$fields_string = '';
$fields = array(
'secret' => 'USERINFO',
'response' => $user_response
);
foreach($fields as $key=>$value)
$fields_string .= $key . '=' . $value . '&';
$fields_string = rtrim($fields_string, '&');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,
'https://www.google.com/recaptcha/api/siteverify');
curl_setopt($ch, CURLOPT_POST, count($fields));
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, True);
$result = curl_exec($ch);
curl_close($ch);
return json_decode($result, true);
}
// Call the function post_captcha
$res = post_captcha($_POST['g-recaptcha-response']);
if (!$res['success']) {
$output = json_encode(array('success' => false));
die($output);
} else {
if($_POST) {
$to = "admin@tremecji.com"; // your mail here
$name = filter_var($_POST["name"], FILTER_SANITIZE_STRING);
$email = filter_var($_POST["email"], FILTER_SANITIZE_EMAIL);
$phone = filter_var($_POST["phone"], FILTER_SANITIZE_STRING);
$message = filter_var($_POST["message"], FILTER_SANITIZE_STRING);
$subject = "$name pregunta desde tremeji.com";
$body = "Mensaje enviado de pagina tremecji.com\nMENSAJE: $message\nE-MAIL: $email\NUMERO DE CONTACTO: $phone";
if(@mail($to, $subject, $body)) {
//db connection ==================================================
//$mysqli = new mysqli('host','user','password','db'); <--- this used to work
$mydb = parse_ini_file('../private/db.ini');
$mysqli = new mysqli( $mydb['servername'],$mydb['username'], $mydb['password'], $mydb['dbname']);
// revision de conneccion
if( $mysqli -> connect_error ){
die( 'Connec error: ' . $mysqli->connect_error . ': ' .$mysqli->connect_error );
}
// insert data
$sql = "INSERT INTO clientes (nombre, email, telefono ) VALUES('{$mysqli->real_escape_string($_POST['name'])}', '{$mysqli->real_escape_string($_POST['email'])}', '{$mysqli->real_escape_string($_POST['telefono'])}'";
$insert = $mysqli->query($sql);
$mysqli->close();
$output = json_encode(array('success' => true));
die($output);
}
}
}
}
在我尝试保护我的登录信息之前它曾经工作过,我尝试将路径更改为我的 db.ini 文件但没有成功
解决方案
推荐阅读
- c# - 如何关闭 ASP.NET ZERO 的 JS 捆绑
- ios - iOS 在空闲超过 30 秒后快速发送消息
- rocksdb - 在rocksdb中按值排序
- python - 获取python中两个列表中所有元素的总和
- python - 如何在没有 for 循环的情况下将 3D 图像矩阵转换为 2d 矩阵?Python 和 numpy
- flutter - 未定义flutter中的InteractiveViewer类
- django - django rest auth注册中password2如何为空
- python - Python Requests 403 错误在一个环境而不是另一个环境中?
- php - CakePhp 如何在 cakephp3 中以创建形式加载多个上下文
- discord.js - 如何让它为使用指定表情符号对消息做出反应的人添加角色