+7 495 008 8452
  • Загрузка
Выберите ваш цвет
Предположим, вам нравится программировать. И так случилось, что по ходу разработки вашего сайта вы сумели освободить часть времени на любимое творчество, и вместо библиотеки jQuery написать свой JavaScript - код. Сделали, загрузили, проверили работу. Послали ссылочку приятелю. Назавтра он ругает вас поганым хакером и требует объяснить, зачем вы пытаетесь внедрить ему троян "HEUR:Trojan.Script.Generic".

Как так? Вы то... по-честному... ни сном ни духом... Давайте разбираться.

Ваш код формы?

<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);

Касперский считает ее попыткой внедрить вредоносную программу. Внезапно!

А что же делать? Например, заменить код так:

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);

И скрипт работает, и посетители не пугаются.



Удачи вам! Пару советов по безопасной работе с JavaScript дала вам Веб-студия "АКРИТ". Разработка и продвижение сайтов на CMS «1С-Битрикс». Мы реализуем полный цикл работ - от разработки логотипа и фирменного стиля будущей компании, до ее продвижения на рынок, используя максимально эффективные современные технологии.

Назад в раздел

Подписаться на новые материалы раздела: