Почему мой сайт предупреждает xssvuln, когда я использую автозаполнение jqueryui?

Я реализую автозаполнение jqueryui на своем сайте, но когда я загружаю эту страницу, он предупреждает «xssvuln». но когда я попытался запустить свой сайт на локальном хосте, проблем не возникло. Не могли бы вы помочь мне исправить это? А еще я запускаю свой сайт на ipage.

это мой js для автозаполнения.

$.ajax({
type: 'post',
url: 'autocompleteCourse.php',
dataType: 'json',
success: function(data){
    var availableCourse = data;
    $( "#course" ).autocomplete({
        source: availableCourse,
        messages: {
            noResults: '',
            results: function() {}
        }
    });
    }
});

и это мой файл php для автозаполнения.

include'../utility/sqlcon.php';

$query = mysql_query("select * from autocomplete where input = 'course'") or die          (mysql_error());
while($q=mysql_fetch_array($query))
{
$courseOptions[] = $q['autoComplete'];
}

echo json_encode($courseOptions);

person boi_echos    schedule 09.12.2013    source источник
comment
xssvuln означает уязвимость межсайтового скриптинга   -  person gvgvgvijayan    schedule 09.12.2013
comment
также только что перешел на PDO, чтобы сделать вашу жизнь намного проще.   -  person DevZer0    schedule 09.12.2013
comment
господа подскажите как решить эту проблему? это беспокоит меня в течение нескольких дней   -  person boi_echos    schedule 09.12.2013
comment
@devZero решит ли переход на pdo эту проблему?   -  person boi_echos    schedule 09.12.2013


Ответы (2)


Я предполагаю, что это имеет мало общего с автозаполнением jQueryUI, но, вероятно, указывает на то, что кто-то взломал ваш сайт, хотя и в дружеской манере.

Вероятно, это намек на то, что кому-то удалось получить что-то в вашу базу данных, например <script>alert('xssvuln');</script>, как указание на то, что ваш сайт уязвим для инъекция межсайтового скриптинга.

Можете ли вы взглянуть на исходный код вашей активной страницы и посмотреть, откуда приходит предупреждение xssvuln? Потому что я сомневаюсь, что это автозаполнение или, по крайней мере, не напрямую. Если это происходит, когда вы используете автозаполнение, я бы проверил результаты поиска того, что вы ищете в вашей действующей системе, чтобы увидеть, включают ли они какой-то Javascript, добавленный хакером, который вы затем вставляете на свою страницу. без должного побега.

В качестве примера: если ваш сайт позволяет вашим пользователям добавлять новый контент, и вы просто принимаете все, что они вводят, а затем выводите его, не выполняя никакой работы по его очистке — удаляя теги сценария, используя такие функции, как htmlspecialchars() во время вывода и т. д. – тогда вы должны понимать, что фактически разрешаете любому пользователю в Интернете добавьте код на свой сайт.

Один из способов, с помощью которого хакер может быстро протестировать уязвимость XSS на сайте, который он исследует, — это найти форму ввода на сайте и добавить к ней код скрипта, чтобы увидеть, прошел ли он недезинфицированным. Таким образом, они могут найти форму комментариев и ввести:

<script>alert('xssvuln');</script>

...внутрь. Если они затем просматривают страницу комментариев на сайте и вместо текста <script>alert('xssvuln');</script> на странице (как мы делаем здесь, в Stack Overflow, например) они видят предупреждение Javascript, они знают, что ваш сайт уязвимый.

Итак, мой совет:

  • Узнайте, откуда приходит предупреждение. Скорее всего, это пользовательский контент в вашей базе данных.
  • Почитайте про межсайтовый скриптинг.
  • Защитите свои входы и выходы от такого рода внедрения Javascript.
  • При необходимости очистите свою базу данных от существующих атак.
person Matt Gibson    schedule 09.12.2013
comment
я обновил исходный код и удалил часть javascript, после чего оповещение не отображается. но когда я добавляю js, страница снова предупреждает xssvuln. - person boi_echos; 09.12.2013
comment
Тогда, вероятно, происходит то, что Javascript извлекает содержимое, содержащее сценарии, из вашей базы данных. Оповещение всплывает при отображении страницы или вам нужно использовать автозаполнение? Можете ли вы поделиться с нами ссылкой на живой сайт, чтобы мы могли посмотреть? (NB: люди должны иметь в виду, что сайт может подвергаться атакам XSS, конечно...) Какие запросы к базе данных используются с автозаполнением? Можете ли вы запустить их через инструмент SQL и посмотреть на вывод, проверить его на что-нибудь подозрительное? - person Matt Gibson; 09.12.2013
comment
psbpinc.com/career А, спасибо, сэр. теперь мне понятнее. Пожалуйста, проверьте это, сэр, хе-хе. - person boi_echos; 09.12.2013
comment
Да. Проблема, похоже, в вашей базе данных. Например, если вы посетите http://psbpinc.com/career/autocompleteSchool.php, источник автозаполнения для поля «Школа», прямо в браузере, вы увидите, что он выводит элемент скрипта в списке школ. Вам нужно проверить код и базовые данные для autocompleteSchool.php и выяснить, как хакер добавил это в вашу базу данных, а затем защититься от него. - person Matt Gibson; 09.12.2013
comment
Один важный момент: вы не можете полагаться на внешний интерфейс для защиты от людей, вводящих < и > в форму — хакер может просто вручную отправить POST-запрос, который выглядит так, как будто он из вашей формы. , но содержит любые данные, которые они хотят поместить. Поэтому вам нужно дезинфицировать входную серверную часть, а не полагаться только на внешний интерфейс. - person Matt Gibson; 09.12.2013
comment
ах, сэр, кто-то вставляет скрипт в мою базу данных. спасибо сэр за информацию - person boi_echos; 09.12.2013
comment
ах. для меня ново, что кто-то может отправить запрос на публикацию вручную. кстати, опять же, я обновил свой исходный код. я добавляю mysql_real_escape_string в поле автозаполнения. как вы думаете, это предотвратит следующие атаки xss? - person boi_echos; 09.12.2013
comment
@AlexCoroza Нет, я не думаю, что это предотвратит атаки xss, но поможет избежать атак с внедрением SQL, которые представляют собой другую уязвимость. Чтобы избежать xss, вам, вероятно, следует использовать htmlspecialchars для значений из базы данных при выводе их из вашего скрипта autocompleteSchool или предотвратить попадание тегов скрипта (или, возможно, вообще любых угловых скобок) в базу данных, возможно, с помощью strip_tags, скажем. Желательно оба. - person Matt Gibson; 09.12.2013

Кто-то нашел уязвимость на вашем сайте и был достаточно великодушен, чтобы указать вам на нее.

Похоже, что в вашей базе данных есть запись в строках:

<script>alert('xssvuln');</script>  

внутри него, который возвращается в результате одного из ваших запросов и отображается на вашей странице.

Нехорошо узнать, что это происходит. Ваше приложение действительно должно проверять, что все данные, вводимые пользователями, свободны от таких вещей, как теги и т. д., чтобы такие вещи не могли произойти. Точно так же всякий раз, когда вы отображаете данные из своей базы данных на странице, имеет смысл запускать функции, которые также проверяют чистоту данных, потому что вы никогда не можете быть слишком уверены.

Чтобы решить эту проблему, я сначала нажимал «Просмотреть исходный код» на вашей странице в реальном времени и определял, где находится фрагмент сценария. Как только вы это узнаете, вы сможете выяснить, где в вашем коде был извлечен скрипт, и удалить его из вашей базы данных.

Пожалуйста, не останавливайтесь на этом. Этот хакер обнаружил важную уязвимость на вашем сайте, которую кто-то может легко использовать для гораздо более разрушительных действий, чем вывод предупреждающего сообщения.

По сути, всякий раз, когда вы отображаете текст из своей базы данных пользователю, обязательно оберните его в следующую функцию:

htmlspecialchars($yourstring);

Это не на 100% надежно, но значительно уменьшит вероятность успешных атак xss на ваш сайт.

person Hecksa    schedule 09.12.2013