Software: Apache
Sistema Operativo: Linux webm009.cluster121.gra.hosting.ovh.net 5.15.167-ovh-vps-grsec-zfs-classid #1 SMP Tue Sep 17 08:14:20 UTC 2024 x86_64
IP do Servidor: 10.121.20.9
Porta: 443
Protocolo: HTTP/1.1
Versão: 8.2.29
SAPI: fpm-fcgi
Limite de memória: 512M
Tempo máximo de execução: 165s
Upload máximo: 128M
pdo: Instalada
pdo_mysql: Instalada
pdo_sqlite: Instalada
index.php encontrado em .
config.php encontrado em ../core
setup-database.php encontrado em ../database
.htaccess não encontrado
.env encontrado em ../core
login.html encontrado em ../auth
styles.css encontrado em ../assets/css
theme.js encontrado em ../assets/css
Ficheiro .env existe
<?php
/**
* PEDRO SILVA - Database Configuration
*
* Este ficheiro contém as configurações de ligação à base de dados.
* Altere os valores abaixo de acordo com a sua hospedagem.
*/
// ============================================
// CARREGAR VARIÁVEIS DE AMBIENTE (.env)
// ============================================
$envFile = __DIR__ . '/.env';
if (file_exists($envFile)) {
$lines = file($envFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($lines as $line) {
if (strpos($line, '=') !== false && strpos($line, '#') !== 0) {
list($key, $value) = explode('=', $line, 2);
$key = trim($key);
$value = trim($value);
// Remover aspas se existirem
$value = trim($value, '"\'');
putenv("$key=$value");
}
}
}
// ============================================
// CONFIGURAÇÃO DA BASE DE DADOS
// ============================================
// Tipo de base de dados: 'sqlite' ou 'mysql'
// Pode ser definido via variável de ambiente DB_TYPE
define('DB_TYPE', getenv('DB_TYPE') ?: 'mysql');
// ============================================
// CONFIGURAÇÃO MySQL
// ============================================
if (DB_TYPE === 'mysql') {
define('DB_HOST', getenv('DB_HOST') ?: 'localhost');
define('DB_USER', getenv('DB_USER') ?: 'root');
define('DB_PASS', getenv('DB_PASS') ?: '');
define('DB_NAME', getenv('DB_NAME') ?: 'barmanager');
define('DB_PORT', getenv('DB_PORT') ?: 3306);
}
// CONFIGURAÇÕES GERAIS
// ============================================
// Chave de sessão (altere para um valor aleatório seguro)
define('SESSION_SECRET', getenv('SESSION_SECRET') ?: 'seu-secret-key-aleatorio-aqui-' . md5(__FILE__));
// Timezone
date_default_timezone_set(getenv('TIMEZONE') ?: 'Europe/Lisbon');
// Modo de debug (true para desenvolvimento, false para produção)
define('DEBUG_MODE', getenv('DEBUG_MODE') === 'true' ? true : false);
// ============================================
// FUNÇÃO DE LIGAÇÃO À BASE DE DADOS
// ============================================
function getDatabase() {
if (DB_TYPE === 'sqlite') {
try {
$db = new PDO('sqlite:' . DB_PATH, null, null, [PDO::ATTR_TIMEOUT => 5]);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $db;
} catch (PDOException $e) {
die('Erro ao conectar à base de dados SQLite: ' . $e->getMessage());
}
} elseif (DB_TYPE === 'mysql') {
try {
$dsn = 'mysql:host=' . DB_HOST . ';port=' . DB_PORT . ';dbname=' . DB_NAME . ';charset=utf8mb4';
$db = new PDO($dsn, DB_USER, DB_PASS, [PDO::ATTR_TIMEOUT => 5]);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $db;
} catch (PDOException $e) {
die('Erro ao conectar à base de dados MySQL: ' . $e->getMessage());
}
}
}
// ============================================
// INICIALIZAR BASE DE DADOS
// ============================================
function initializeDatabase() {
$db = getDatabase();
// Determinar tipo de BD
$dbType = DB_TYPE;
if ($dbType === 'mysql') {
// Criar tabela para MySQL
$db->exec("
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255) UNIQUE NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
failed_attempts INT DEFAULT 0,
last_failed_login DATETIME NULL,
role VARCHAR(50) DEFAULT 'user',
last_login_ip VARCHAR(45) NULL,
last_login_agent TEXT NULL,
last_login_at DATETIME NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
");
// Criar tabela para preco salvo
$db->exec("
CREATE TABLE IF NOT EXISTS user_saved_price (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
price DECIMAL(10, 2) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
UNIQUE KEY unique_user (user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
");
} else {
// Criar tabela para SQLite
$db->exec("
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE NOT NULL,
email TEXT UNIQUE NOT NULL,
password TEXT NOT NULL,
failed_attempts INTEGER DEFAULT 0,
last_failed_login DATETIME NULL,
role TEXT DEFAULT 'user',
last_login_ip TEXT NULL,
last_login_agent TEXT NULL,
last_login_at DATETIME NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
)
");
// Criar tabela para preco salvo
$db->exec("
CREATE TABLE IF NOT EXISTS user_saved_price (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL UNIQUE,
price REAL NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
)
");
}
// Não criar utilizador admin automaticamente
// O utilizador admin deve ser criado apenas através do setup-database.php ou reset-database.php
return $db;
}
?>Tipo: mysql
Servidor: frompeo811.mysql.db
Base de dados: frompeo811
index.php (Ficheiro): 0604
Local atual: /home/frompeo/www/modules
Root do servidor: /home/frompeo/www
Script atual: /modules/diagnose.php
✅ HTTPS: Ativo
✅ Database: Senhas encriptadas
✅ Sessions: Secure
✅ Input validation: Active