XSS 全称为 Cross Site Scripting,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,进而达到某些人的攻击目的。
分类
1、XSS反射型攻击,恶意代码并没有保存在目标网站,通过引诱用户点击一个链接到目标网站的恶意链接来实施攻击的。
2、XSS存储型攻击,恶意代码被保存到目标网站的服务器中,这种攻击具有较强的稳定性和持久性,比较常见场景是在博客,论坛等社交网站上,但OA系统,和CRM系统上也能看到它身影,比如:某CRM系统的客户投诉功能上存在XSS存储型漏洞,黑客提交了恶意攻击代码,当系统管理员查看投诉信息时恶意代码执行,窃取了客户的资料,然而管理员毫不知情,这就是典型的XSS存储型攻击。
危害
1.窃取cookies,读取目标网站的cookie发送到黑客的服务器上
2.读取用户未公开的资料,如果:邮件列表或者内容、系统的客户资料,联系人列表等等
防御
1、最简单的处理办法,只需要在接受数据处理的时候用上过滤函数htmlspecialchars,这个函数会把代码中的特殊字符转义成HTML实体,输出的时候就不会影响页面了
htmlspecialchars($_POST['content']);
2、另一种方法是直接过滤掉html标签,这里要用到正则表达式
<?php $rege = '/<\/?[^>]+>/'; $result = preg_replace($rege,"",$_POST['content']); echo $result; ?>
3、PHP提供了一个内置的strip_tags函数可以出去字符串中HTML和PHP标签,仅保留参数中指定的标签
<?php $str = '<p>Test parjlkasdf </p><a href="#test">Other text</a>'; echo strip_tags($str); echo "</br>"; echo strip_tags($str,'<p> <a>');//允许p标签和a标签 ?>