为什么我的网站提醒“;xssvuln”;当我使用jqueryui自动完成时


Why does my site alert "xssvuln" when I use jqueryui autocomplete?

我在我的网站上实现了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);

我想这与jQueryUI自动完成无关,但可能表明有人入侵了你的网站,尽管这是一种友好的警告方式。

这可能是一个暗示,有人成功地将<script>alert('xssvuln');</script>之类的内容写入了您的数据库,这表明您的站点容易受到跨站点脚本注入的攻击。

你能看看你的实时页面的源代码,看看xssvuln警报是从哪里来的吗?因为我怀疑它是自动完成的,或者至少不是直接完成的。如果你使用自动完成时发生这种情况,我会检查搜索结果,看看你在实时系统中搜索的内容是否包括黑客放入的一些Javascript,然后你在没有正确转义的情况下将其插入页面。

举个例子:如果你的网站允许用户添加新内容,而你只是接受他们键入的任何内容,然后输出它,而不做任何消毒工作——删除脚本标记,在输出过程中使用htmlspecialchars()等功能,那么你必须意识到,你实际上允许互联网上的任何人向你的网站添加代码

黑客在他们正在探测的网站上快速测试XSS漏洞的方法之一是在网站上找到一个输入表单,并向其中添加脚本代码,看看它是否未初始化就通过了。因此,他们可能会找到一个评论表单,并键入:

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

如果他们查看网站上的评论页面,而不是在页面上看到文本<script>alert('xssvuln');</script>(例如,我们在Stack Overflow中所做的),他们会看到Javascript警报,他们就知道你的网站很脆弱。

所以,我的建议:

  • 找出警报的来源。很可能是您数据库中用户提交的内容
  • 阅读跨站点脚本
  • 保护您的输入和输出不受这种Javascript注入的影响
  • 如有必要,清除数据库中的现有攻击

有人在您的网站中发现了一个漏洞,并慷慨地向您指出了这一点。

看起来你的数据库有一个条目,行如下:

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

在它内部,它将作为您的一个查询的结果返回并显示在您的页面中。

发现这种情况发生不是一个好消息。您的应用程序应该真正检查用户输入的所有数据是否没有标签等内容,这样就不会发生这样的事情。同样,每当您在页面上显示数据库中的数据时,运行检查数据是否干净的函数也是值得的,因为您永远都不会太确定。

为了解决这个问题,首先我会在你的实时页面上点击视图源,并找到脚本的位置。一旦你知道了这一点,你就可以找出脚本在代码中的位置,并将其从数据库中删除。

不过,请不要就此打住。这个黑客强调了你网站中的一个重要漏洞,有人很容易利用这个漏洞做比发出警报消息更具破坏性的事情。

基本上,无论何时向用户显示数据库中的文本,都要确保将其封装在以下函数中:

htmlspecialchars($yourstring);

这不是100%万无一失的,但将大大降低xss攻击成功的可能性。