import React, { useState } from 'react';
const App = () => {
const [isBlocked, setIsBlocked] = useState(false);
const [blockedUrls, setBlockedUrls] = useState([
'/sitemap.xml',
'/?s=',
'/search?q=',
'/wp-admin',
'/admin'
]);
const [newUrl, setNewUrl] = useState('');
// Função para bloquear URLs com base em padrões
const blockUrls = () => {
// Bloquear acesso direto ao sitemap.xml
if (window.location.pathname.endsWith('sitemap.xml')) {
alert('Acesso negado: Arquivo sitemap.xml não disponível');
window.history.back();
return;
}
// Bloquear buscas com parâmetros ?s=
if (window.location.search.includes('?s=')) {
alert('Busca não permitida. Por favor, use a funcionalidade de busca fornecida.');
window.history.back();
return;
}
// Bloquear outros padrões comuns de busca
if (window.location.search.includes('?q=') ||
window.location.search.includes('?search=')) {
alert('Acesso restrito a páginas de busca diretas.');
window.history.back();
return;
}
setIsBlocked(true);
setTimeout(() => setIsBlocked(false), 2000);
};
// Função para adicionar nova URL para bloqueio
const addBlockedUrl = () => {
if (newUrl.trim() && !blockedUrls.includes(newUrl)) {
setBlockedUrls([...blockedUrls, newUrl]);
setNewUrl('');
}
};
// Função para remover URL da lista de bloqueio
const removeBlockedUrl = (url) => {
setBlockedUrls(blockedUrls.filter(u => u !== url));
};
// Script JavaScript que pode ser inserido no site
const javascriptCode = `
// Script de Bloqueio de URLs Sensíveis
(function() {
'use strict';
// URLs e padrões a serem bloqueados
const blockedPatterns = [
'sitemap.xml',
'/?s=',
'?s=',
'/search?',
'/wp-admin',
'/admin',
'login',
'config'
];
// Verificar URL atual
function checkCurrentURL() {
const currentPath = window.location.pathname.toLowerCase();
const currentSearch = window.location.search.toLowerCase();
const currentHref = window.location.href.toLowerCase();
// Verificar se a URL corresponde a algum padrão bloqueado
for (let pattern of blockedPatterns) {
if (currentPath.includes(pattern) ||
currentSearch.includes(pattern) ||
currentHref.includes(pattern)) {
// Impedir o carregamento normal da página
document.body.innerHTML = \`
Acesso Negado
O acesso a esta página não é permitido.
\`;
// Redirecionar após 3 segundos
setTimeout(() => {
window.history.back();
}, 3000);
return true;
}
}
return false;
}
// Verificar imediatamente ao carregar
if (checkCurrentURL()) {
return;
}
// Monitorar mudanças de URL (para SPAs)
let oldHref = window.location.href;
const body = document.querySelector('body');
const observer = new MutationObserver(() => {
if (oldHref !== window.location.href) {
oldHref = window.location.href;
checkCurrentURL();
}
});
observer.observe(body, { childList: true, subtree: true });
// Prevenir navegação programática
const originalPushState = history.pushState;
history.pushState = function(state, title, url) {
if (url) {
const lowerUrl = url.toLowerCase();
for (let pattern of blockedPatterns) {
if (lowerUrl.includes(pattern)) {
console.warn('Tentativa de navegação bloqueada:', url);
return;
}
}
}
return originalPushState.apply(history, arguments);
};
// Interceptação de requisições XHR (opcional)
const originalOpen = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function(method, url) {
const lowerUrl = url.toLowerCase();
for (let pattern of blockedPatterns) {
if (lowerUrl.includes(pattern)) {
console.warn('Requisição bloqueada:', method, url);
this.abort();
return;
}
}
return originalOpen.apply(this, arguments);
};
console.log('Proteção de URLs ativada');
})();
`;
// Código para .htaccess (alternativa server-side)
const htaccessCode = `
# Proteger sitemap.xml e páginas de busca
RewriteEngine On
# Bloquear acesso direto ao sitemap.xml
RewriteRule ^sitemap\\.xml$ - [R=403,L]
RewriteRule ^.*sitemap\\.xml$ - [R=403,L]
# Bloquear parâmetros de busca ?s=
RewriteCond %{QUERY_STRING} (^|&)s= [NC]
RewriteRule ^.*$ - [R=403,L]
# Bloquear outros parâmetros de busca
RewriteCond %{QUERY_STRING} (^|&)(q|search|query)= [NC]
RewriteRule ^.*$ - [R=403,L]
# Proteger áreas administrativas
RewriteRule ^wp-admin/ - [R=403,L]
RewriteRule ^admin/ - [R=403,L]
RewriteRule ^login/ - [R=403,L]
# Alternativamente, redirecionar para página de erro amigável
ErrorDocument 403 /acesso-negado.html
`;
return (
{/* Header */}
Bloqueador de URLs
Proteja seu site bloqueando acesso a arquivos sensíveis como sitemap.xml e páginas de busca
{/* Main Content */}
{/* Left Column - Demo */}
Teste de Bloqueio
URLs Monitoradas:
{blockedUrls.map((url, index) => (
{url}
))}
setNewUrl(e.target.value)}
placeholder="Adicionar nova URL..."
className="flex-1 px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent"
/>
{/* Right Column - Information */}
{/* JavaScript Code */}
{/* HTAccess Code */}
Código .htaccess (Server-side)
{/* Features */}
Funcionalidades
{[
{
icon: "🛡️",
title: "Proteção Completa",
desc: "Bloqueia acesso direto a arquivos sensíveis e páginas de busca"
},
{
icon: "🚀",
title: "Performance",
desc: "Leve e eficiente, sem impacto significativo no desempenho"
},
{
icon: "🔧",
title: "Personalizável",
desc: "Adicione facilmente novos padrões de URLs para bloqueio"
}
].map((feature, index) => (
{feature.icon}
{feature.title}
{feature.desc}
))}
{/* Footer */}
© 2024 Bloqueador de URLs | Proteja seu site com segurança
);
};
export default App;