Защо моят сайт предупреждава xssvuln, когато използвам jqueryui autocomplete?

Внедрявам jqueryui autocomplete на моя сайт, но когато заредя тази страница, тя предупреждава "xssvuln". но когато се опитах да стартирам сайта си на localhost, нямаше проблем. Можете ли да ми помогнете да поправя това? И също така, управлявам сайта си на 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, източникът на автоматичното довършване за полето School, директно в браузър, ще видите, че той извежда скриптов елемент в списъка с училища. Трябва да проверите кода и основните данни за 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