Почему Касперский определяет на сайте троян HEUR:Trojan.Script.Generic? (и возможный способ устранения)

от автора

Доброго времени суток. У меня созрела еще одна статья, касающаяся безопасности, а точнее доступа к Вашим сайтам, уважаемые вебмастера… и позвольте мне Вам рассказать.

Угроза «HEUR:Trojan.Script.Generic»

Возможно у Вас есть сайт и Вы не использовали библиотеки типа jQuery, а решили просто на яваскрипте «спагетти-код на сайте намотать» (пусть как я, ради спортивного интереса). И тут Вы наверное даже не ожидаете такой «подлости» от любимого антивируса Касперского, тем более если Вы им не пользуетесь… а пользуется Ваш друг. Он то и увидит такое сообщение на Вашем сайте «объект заражен HEUR:Trojan.Script.Generic»:

А тем временем, другие антивирусы молчат.

Чтобы рассказать Вам в чем тут дело, я вынужден привести код на яваскрипте, поэтому про него и буду рассказывать далее.
Решил значит я с даталистом поиграться для организации автокомплита без сторонних библиотек (появилось в HTML5 такое чудо, да беда у него с русскими буквами правда, пардон за оффтоп).
Написал код формы:

<form method="get" action="" >   <input type="search" name="q" value="<?= $q; ?>" list="json-datalist" id="i_search" autocomplete="off" />   <input type="submit" value=" Искать " /> </form> <datalist id="json-datalist"></datalist> 

И следом написал, как мне казалось, безобидный код:

// Принимаем элементы <datalist> и <input>  var dataList = document.getElementById('json-datalist'); var input = document.getElementById('i_search'); // Создаем новый XMLHttpRequest. var request = new XMLHttpRequest(); // Перехватываем состояние запроса. request.onreadystatechange = function(response) {   if (request.readyState === 4) {     if (request.status === 200) {       var jsonOptions = JSON.parse(request.responseText); // Parse the JSON       // Перебираем массив JSON        jsonOptions.forEach(function(item) {         var option = document.createElement('option');          // Устанавливаем значение с помощью элемента в json-массив.         option.value = decodeURIComponent(unescape(item));          // Добавляем элементы списка <option> к <datalist>.         dataList.appendChild(option);        });       input.placeholder = "Please type";      } else {       // Если произошла ошибка       input.placeholder = "Couldn't load datalist";     }   } }; // обновим плейсхолдер input.placeholder = "Loading options...";  //  Установить и сделать запрос request.open('GET', URL_BASE+'/data.json', true); request.send(); 

Получаем наш троян!
— Где троян? Вы не видите? О, и я тоже не вижу, а Касперский видит!
А видит он его здесь:

 request.open('GET', URL_BASE+'/data.json', true); 

Тогда убираем эту строчку и все в порядке — наш скрипт не работает, и антивирус спокоен.

«Разбор полетов»

Значит нужно поковыряться в перехватчике состояния запроса — onreadystatechange.
Нашим лекарством будет отдельная функция, назовем ее updatePage, в которую мы напишем перебор возвращаемого JSON-массива и присвоим ее здесь в нашем перехватчике состояния:

 request.onreadystatechange = updatePage; 

В итоге переписал код так, что антивирус Касперского больше нас не тревожит:

var dataList = document.getElementById('json-datalist'); var input = document.getElementById('i_search'); var url = URL_BASE + '/data.json'; var request = null; if(window.XMLHttpRequest) request = new XMLHttpRequest(); else if (window.ActiveXObject) request  = new ActiveXObject(Microsoft.XMLHTTP); 	function updatePage() 	{ 	  if (request.readyState == 4) 		if (request.status == 200) 		{ 			var jsonOptions = JSON.parse(request.responseText); 			jsonOptions.forEach(function(item) { 				var option = document.createElement('option'); 				option.value = item; 				dataList.appendChild(option); 			}); 			input.placeholder = "Please type"; 		delete request; 		} 		else 		{ 			input.placeholder = "Couldn't load datalist"; 		} 	} request = getXmlHttp(); request.open("GET", url, true); request.onreadystatechange = updatePage; request.send(null); 

P.S. Я не говорю, что это единственная причина, по которой может появиться предупреждение в виде такого сообщения от горячо любимого антивируса, ведь могут быть и случаи существования действительно «левого скрипта» на вашем сайте.

ссылка на оригинал статьи http://habrahabr.ru/post/254437/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *