Бан при нажатии клавиш

231
18 июля 2018, 15:40

Как сделать чтобы по нажатии клавиш ctrl + u в пхп срабатывал код, который записывал в .htaccess айпи клиента, нажавшего эту кнопку?

Answer 1

Писать в .htaccess ip адреса честно не очень удобно, лучше их заносить в бд, а потом сверять их вот пример кода надеюсь он вам будет полезен 1. Сначало нужно создать таблицу в бд

CREATE TABLE `ip_block` ( 
	`id` INT(2) NOT NULL AUTO_INCREMENT, 
	`ip` VARCHAR(250) NOT NULL DEFAULT '0' COLLATE 'utf8_unicode_ci', 
	PRIMARY KEY (`id`) 
) 
COLLATE='utf8_unicode_ci' 
ENGINE=InnoDB

2. Сделать подключение к базе данных для этого мы будем использовать обёртку PDO пример файла db.php

<?php  
    $host = 'localhost'; 
    $db   = 'ваша бд'; 
    $user = 'имя пользователя'; 
    $pass = 'ваш  пароль'; 
    $charset = 'utf8'; 
 
    $dsn = "mysql:host=$host;dbname=$db;charset=$charset"; 
    $opt = [ 
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION, 
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 
        PDO::ATTR_EMULATE_PREPARES   => false, 
    ]; 
    $pdo = new PDO($dsn, $user, $pass, $opt);

  1. Нужно создать сам идексный файл, который будет проверять есть-ли данный ip адрес в бд заблокированных пользователей если нет, то выводим нужнную страницу. И амое главное если пользователь нажал Ctrl+U то мы его ip адрес отправляем в бд в ч/с. Далее выводим бесконечный цикл в котором выводится alert бесконечное количество раз. Это связанно с тем что пользователю не удалось открыть страницу view-source: . Когда он снова откроет сайт то увидит блок страницу. Сам файл index.php

<?php 
 
require_once 'db.php'; 
 
$ip = $_SERVER["REMOTE_ADDR"]; 
$stmt = $pdo->prepare("SELECT COUNT(ip) as ip FROM ip_block WHERE ip=:ip"); 
$stmt->bindParam(':ip', $ip); 
$stmt->execute(); 
$block = $stmt->fetch(); 
if($block["ip"] > 0){ 
header('Location: /test/ban.php'); 
exit; 
} 
?> 
<!DOCTYPE html> 
<html> 
<head> 
	<title></title> 
</head> 
<body> 
<h1>Пользователь ещё не нажал CTRL+U</h1> 
</body> 
</html> 
<script> 
var message="Правая кнопка мыши отключена!"; 
function click(e) { 
   if (document.all) {    // IE 
      if (event.button == 2) {    // Чтобы отключить левую кнопку поставьте цифру 1 
          alert(message);    // чтобы отключить среднюю кнопку поставьте цифру 1 
          return false;} 
      } 
   if (document.layers) { // NC 
      if (e.which == 3) { 
          alert(message); 
          return false;} 
      } 
} 
if (document.layers) 
   {document.captureEvents(Event.MOUSEDOWN);} 
document.onmousedown=click; 
document.oncontextmenu=function(e){return false}; 
 
 
 
 
document.mousedown=function(e){ if(event.which == 3)         
        {           
            alert(); 
        } 
} 
 
let isCtrl = false; 
document.onkeyup=function(e){ if(e.which == 17) isCtrl=false; } 
document.onkeydown=function(e) { 
    if(e.which == 17) isCtrl=true; 
    if(e.which == 85 && isCtrl === true) { 
 
 
let xhr = new XMLHttpRequest(); 
 
 
xhr.open('GET', 'check.php', false); 
 
 
xhr.send(); 
 
if (xhr.status != 200) { 
  alert( 'что-то не работает' );  
} else { 
  location.reload(); 
} 
let b = 1; 
for (var i = 0; i < b; i++) { 
	alert(); 
	b++; 
} 
  
 
 
    } 
}  
</script> 
</body> 
</html> 
</script>

  1. Добавляем ip пользователя в бд файл check.php

require_once 'db.php'; 
 
$ip = $_SERVER["REMOTE_ADDR"]; 
$stmt = $pdo->prepare("SELECT COUNT(ip) as ip FROM ip_block WHERE ip=:ip"); 
$stmt->bindParam(':ip', $ip); 
$stmt->execute(); 
$block = $stmt->fetch(); 
if($block["ip"] > 0){ 
header('Location: /test/ban.php'); 
exit; 
} 
?> 
<!DOCTYPE html> 
<html> 
<head> 
	<title></title> 
</head> 
<body> 
<h1>Пользователь ещё не нажал CTRL+U</h1> 
</body> 
</html> 
<script> 
var message="Правая кнопка мыши отключена!"; 
function click(e) { 
   if (document.all) {    // IE 
      if (event.button == 2) {    // Чтобы отключить левую кнопку поставьте цифру 1 
          alert(message);    // чтобы отключить среднюю кнопку поставьте цифру 1 
          return false;} 
      } 
   if (document.layers) { // NC 
      if (e.which == 3) { 
          alert(message); 
          return false;} 
      } 
} 
if (document.layers) 
   {document.captureEvents(Event.MOUSEDOWN);} 
document.onmousedown=click; 
document.oncontextmenu=function(e){return false}; 
 
 
 
 
document.mousedown=function(e){ if(event.which == 3)         
        {           
            alert(); 
        } 
} 
 
let isCtrl = false; 
document.onkeyup=function(e){ if(e.which == 17) isCtrl=false; } 
document.onkeydown=function(e) { 
    if(e.which == 17) isCtrl=true; 
    if(e.which == 85 && isCtrl === true) { 
 
 
let xhr = new XMLHttpRequest(); 
 
 
xhr.open('GET', 'check.php', false); 
 
 
xhr.send(); 
 
if (xhr.status != 200) { 
  alert( 'что-то не работает' );  
} else { 
  location.reload(); 
} 
let b = 1; 
for (var i = 0; i < b; i++) { 
	alert(); 
	b++; 
} 
  
 
 
    } 
}  
</script> 
</body> 
</html> 
</script>

  1. Файл если пользователя бан . Файл ban.php

<!DOCTYPE html> 
<html> 
<head> 
	<title></title> 
</head> 
<body> 
<h1>Умник ты забанен</h1> 
</body> 
</html>

скачать zip архив https://drive.google.com/open?id=1WIRJsJF6YPi6IvV_HtreHFaxSp9BHoYL

посмотреть видео https://youtu.be/5oKPTEXL2oU

  1. Ссылки на полезные статьи и документацию

Введение в браузерные события - https://learn.javascript.ru/introduction-browser-events

Виртуальные коды клавиш для javascript (event.keyCode) - http://umi-cms.spb.su/ref/javascript/251/

Объекты данных PHP PDO - http://php.net/manual/ru/book.pdo.php#book.pdo

Как работать с PDO? Полное руководство(очень полезно) - http://phpfaq.ru/pdo

Информация о сервере и среде исполнения - http://php.net/manual/ru/reserved.variables.server.php

Основы XMLHttpRequest - https://learn.javascript.ru/ajax-xmlhttprequest

Цикл (программирование) - https://ru.wikipedia.org/wiki/%D0%A6%D0%B8%D0%BA%D0%BB_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)

READ ALSO
Не работает функция FROM_BASE64

Не работает функция FROM_BASE64

Всем доброго времени сутокКогда пытаюсь вызвать функцию FROM_BASE64 в запросе, то выдает ошибку с текстом "#1305 - FUNCTION myDB

202
Получение токена Вконтакте

Получение токена Вконтакте

Заранее прошу прощения за ошибкиМне необходимо реализовать авторизацию Вконтакте

155
PHP, как в array добавить null?

PHP, как в array добавить null?

Как можно добавить в array null-значение? Array_push ругается:

159
Как с генерировать csrf токен, используя HTML meta tag?

Как с генерировать csrf токен, используя HTML meta tag?

Нужно с генерировать csrf токен для POST запроса ,

182