Простейшая фильтрация входящих данных, must have для любого сайта на php везде и всегда.
Стоит уделить совсем немного времени ДО того, как сайт пострадает от вирусных проблем, чем потом долго и нудно чистить его, двигаясь по пунктам бесконечной и мудреной инструкции.
1. Узнайте абсолютный путь к папке сайта. Для этого положите в папку сайта файл с длиннейшим абракадаберным названием, например Ndjcwi-JDsw783hgS-QG_QGW.php
, со следующим содержанием:
<?php
echo $_SERVER['DOCUMENT_ROOT'];
?>
Затем перейдите по ссылке http://ваш_сайт/Ndjcwi-JDsw783hgS-QG_QGW.php
Отобразится что-то вроде /var/www/vhosts/moysait/httpdocs/
– это и будет абсолютный путь к папке сайта. Запишите себе этот путь, и удалите наш абракадаберный файл.
2. Создайте папку filter
на уровень выше чем папка сайта, она должна быть рядом с папкой сайта. И положите в эту папку файл prfilter.php
следующего содержания:
<?php
$patt = "~\<\?~i";
if (is_array($_FILES)) {
foreach($_FILES as $anystring=>$file_data) {
if (preg_match($patt,file_get_contents($file_data['tmp_name']))) die("denied by antivirus-alarm 3");
}
}
$patt = "~\/\.\.\/\.\.\/\.\.\/|{0-9a-zA-Z}[80]|eval[^\(]*\(|include[^\(]*\(|base64_decode[^\(]*\(|stripslashes[^\(]*\(|strip_tags[^\(]*\(|fopen[^\(]*\(|chmod[^\(]*\(|chown[^\(]*\(|chgrp[^\(]*\(|unlink[^\(]*\(|unset[^\(]*\(|fgetc[^\(]*\(|fgets[^\(]*\(|file_get_contents[^\(]*\(|file_put_contents[^\(]*\(|fwrite[^\(]*\(|move_uploaded_file[^\(]*\(|is_uploaded_file[^\(]*\(|rmdir[^\(]*\(|fromCharCode[^\(]*\(|tmpfile[^\(]*\(|tempnam[^\(]*\(|phpinfo[^\(]*\(|basename[^\(]*\(|curl_init[^\(]*\(|socket_create[^\(]*\(|popen[^\(]*\(|exec[^\(]*\(|system[^\(]*\(|passthru[^\(]*\(|proc_open[^\(]*\(|gzuncompress[^\(]*\(|shell_exec[^\(]*\(|delete from|insert into~i";
foreach ($_REQUEST as $v1x1) prfilter_x1($v1x1,$patt);
function prfilter_x1($v1x1,$patt) {
ob_start();
if (is_array($v1x1)) {
foreach ($v1x1 as $vx) prfilter_x1($vx,$patt);
}
else {
if ( preg_match($patt, $v1x1) || preg_match($patt, stripslashes($v1x1) ) ) die("denied by antivirus-alarm 1");
if ( preg_match($patt, base64_decode($v1x1) ) || preg_match($patt, stripslashes(base64_decode($v1x1) ) ) ) die("denied by antivirus-alarm 2");
}
ob_end_clean();
}
?>
3. Откройте файл .htaccess лежащий у вас в корне сайта, и добавьте вверху строку:
php_value auto_prepend_file /var/www/vhosts/moysait/filter/prfilter.php
Вместо /var/www/vhosts/moysait/httpdocs/
надо, конечно, поставить свой абсолютный путь, который мы выясняли в п.1
4. Проверяем, теперь по адресу http://ваш_сайт/?x=eval()
должно быть сообщение: "denied_by antivirus-alarm 1". Также смотрим по http://ваш_сайт/
– всё должно работать по прежнему.
5. Если при работе в админке сайта вам не к месту выдается сообщение "denied_by antivirus-alarm" – обратитесь к своему вебмастеру или программисту, чтобы подкорректировать фильтр для вашего конкретного случая. Не отключайте фильтр, обзательно используйте его постоянно – он защищает ваш сайт не только от известных угроз, но и от тех, что могут появиться в будущем.
- Также рекомендуется:
- Делать резервное копирование сайта самостоятельно, а также следить за тем, что хостеры его тоже делают;
- Отказаться от использования
FTP
, использовать толькоSFTP
; - Если ваш хостер не предоставляет вам
SSH
доступ к сайту, и вы из-за этого не можете делать бэкапы самостоятельно, и не может использоватьSFTP
– поменяйте хостера; - Используйте лицензионные и только лицензионные
CMS
для своего сайта. Не обязательно платные; - Следите за выходом новостей и заплаток для вашей
CMS
на официальном сайте поддержки этойCMS
; - Скачивайте архив для установки
CMS
и любых плагинов только с официальных сайтов, и следите за новостями об уязвимости этих плагинов; - Если у вас используются утилиты наподобие
phpMyAdmin
, помещайте их в папки с неочевидными, лучше всего длинными и абракадаберными названиями, наподобиеwfqmwkmuSKIwefuihDksdjf
– это препятствует их нашариванию; - Ограничивайте доступ к админке сайта, утилитам, наподобие
phpMyAdmin
и другим инструментам управления сайтом, поip
; - Используте очень длинные, абракадаберные и полные кракозябликов пароли, наподобие
447duIDJfwIW0112ShdsQ_Q_WAED--^kasjG7QAQ
; - Храните пароли в текстовом или вордовском файле, а не в "запоминалке" паролей вашего броузера или файловой программы.
Комментарии:
coder.hol.es /* Админ */#
Внизу статьи есть ссылка на источник – при желании, вы можете написать непосредственно авторам. Кроме того, никто не мешает подкорретировать код под свои нужды.
beoro#
очередной безмозглый говно код, экранируйте слешами входящие данные и обволакуйте через htmlspecialchars и нечего не нужно другого выдумывать